如何从共享库调用静态库函数?

时间:2019-05-09 07:56:38

标签: android c++ c android-ndk ndk-build

我已经建立了一个静态库(armv64-v8a体系结构的main.a),在其根文件夹中有一个main.cpp,它公开了如下静态函数:

void main::global(void * _o, void * _i);

我的要求是在android中构建包装器,然后从android应用程序中调用此函数。

我尝试了以下操作:

  • 创建了一个jni文件夹。
  • 创建了一个jni / static / arm64-v8a文件夹。
  • 在上面的文件夹中移动了main.o。
  • 在jni文件夹中创建一个名为export.cpp的新文件,并将以下代码写入其中:
    #include <jni.h>
    #include <string.h>
    #include <stdlib.h>
    #include <main.h>

    JNIEXPORT void JNICALL Java_com_example_test_sendData(JNIEnv *env, jobject obj, jbyteArray outData, jbyteArray inData)
    {
    }
  • 在jni文件夹下创建了一个Application.mk文件,内容如下:
APP_ABI := arm64-v8a
APP_PLATFORM := android-23
  • 在jni文件夹下创建了一个Android.mk文件,其内容如下:
LOCAL_PATH := $(call my-dir)

########################
# prepare static lib
include $(CLEAR_VARS)
LOCAL_MODULE    := main
LOCAL_SRC_FILES := static/$(TARGET_ARCH_ABI)/main.a
include $(PREBUILT_STATIC_LIBRARY)
########################

########################
# prepare export
include $(CLEAR_VARS)
LOCAL_MODULE    := export
LOCAL_SRC_FILES := export.cpp
LOCAL_STATIC_LIBRARIES := main
include $(BUILD_SHARED_LIBRARY)
########################

现在,如果我运行ndk-build命令,它将引发如下错误:

[arm64-v8a] Compile++      : export <= export.cpp
jni/export.cpp:4:10: fatal error: 'main.h' file not found
#include <main.h>
         ^~~~~~~~~
1 error generated.
make: *** [obj/local/arm64-v8a/objs/export/export.o] Error 1

请帮助我解决此问题。

试图将#include <main.h>更改为#include "main.h",但是它不起作用并抛出相同的错误。

0 个答案:

没有答案