Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AndroidNDK:依赖预构建库构建库时出现问题_Android_Linker_Android Ndk - Fatal编程技术网

AndroidNDK:依赖预构建库构建库时出现问题

AndroidNDK:依赖预构建库构建库时出现问题,android,linker,android-ndk,Android,Linker,Android Ndk,我有一个名为B的c库,它依赖于另一个名为a的c库。我确信我可以通过Android NDK成功编译和使用a 现在我正在尝试使用androidndk编译B库。我有一个jni文件夹和Android项目。我的jni文件夹包含A和B文件夹,它们具有库c代码。jni文件夹还有一个预构建文件夹,其中包含a.so文件(预构建的a库文件) 我的问题是,我不能建立B。我可以编译它,但我不能链接它。请问,有人能帮我指出我的错误吗?A和B是我在项目中使用的通用名称,而不是我正在使用的真实名称。我将在下面列出Androi

我有一个名为B的c库,它依赖于另一个名为a的c库。我确信我可以通过Android NDK成功编译和使用a

现在我正在尝试使用androidndk编译B库。我有一个jni文件夹和Android项目。我的jni文件夹包含A和B文件夹,它们具有库c代码。jni文件夹还有一个预构建文件夹,其中包含a.so文件(预构建的a库文件)

我的问题是,我不能建立B。我可以编译它,但我不能链接它。请问,有人能帮我指出我的错误吗?A和B是我在项目中使用的通用名称,而不是我正在使用的真实名称。我将在下面列出Android.mk文件

用于构建A的Android.mk文件(该文件对于我描述的Android项目不可见,尽管它也有A代码):

预构建文件夹中的Android.mk文件:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := libA
LOCAL_SRC_FILES := prebuilt/libA.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/A/src
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := libB
LOCAL_SRC_FILES := B/src/fileB.c
LOCAL_SHARED_LIBRARIES := libA
include $(BUILD_SHARED_LIBRARY)
执行ndk build命令时,最终输出如下:

B/src/fileB.c:15:错误:未定义对的引用 “A_函数”集合2:ld返回1个退出状态make:* [obj/local/armeabi/libB.so]错误1


B库文件实际上可以访问A库,但它们不知道如何访问。将所需的标题(.h文件来自A库)添加到JNI的子文件夹,并指定以下内容:

LOCAL_C_INCLUDES := $(LOCAL_PATH)/your/sub/folder
在您的B项目声明中

我仍然有一个问题,必须将a库声明为预构建的_静态库,然后添加到B库

LOCAL_WHOLE_STATIC_LIBRARIES := libA

谢谢你的回答。但是,请问,您的意思是我应该修改Android项目中jni文件夹的Android.mk文件以编译B,这样它就不会有“LOCAL_SHARED_LIBRARIES:=libA”子句吗?如果是这样的话,很抱歉,它还没有解决问题。我已经有了类似$(LOCAL_PATH)/your/sub/folder的东西,它是我的A/src文件夹,而LOCAL_C_include似乎没有效果,因为在B project Android.mk文件中设置了LOCAL_EXPORT_C_include。我是说你应该用LOCAL_全局静态_库替换LOCAL_共享_库。
LOCAL_WHOLE_STATIC_LIBRARIES := libA