Android.mk:共享库未链接
我试图将我的库libtest.so
包含到另一个库中。Android.mk:共享库未链接
libtest.so
编译成功,文件夹中:
$PROJECT/obj/local/armeabi/libtest.so
当我试图用它在我Android.mk
文件,我无法使用其功能。然而,我没有收到错误信息,即使我包含一个不存在的库。
这是我Android.mk
文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#LOCAL_SHARED_LIBRARY := test
LOCAL_SHARED_LIBRARIES := test
LOCAL_MODULE := mylib
LOCAL_SRC_FILES := myLib.cpp
include $(BUILD_SHARED_LIBRARY)
当我建立了这个,我刚刚从我的很多"No such file or directory"
错误从库包括:
jni/myLib.cpp:10:24: error: myinclude.h: No such file or directory
myinclude.h
是从一个文件图书馆。每个论坛的答案似乎都说,LOCAL_SHARED_LIBRARIES := test
或LOCAL_SHARED_LIBRARIES := libtest
就足以使用该库。
我错过了什么?
因为它是图书馆的责任,告诉你什么,包括,尽管它可能会暂时解决问题使用LOCAL_C_INCLUDES
指定包括书面文件由其他人(如the answer by Gavin中所建议的)在可维护性方面不是一个好主意。
其中一个问题是,您的问题是libtest
的Android.mk
文件未正确书写。如果它导出任何头文件,则应该为其添加LOCAL_EXPORT_C_INCLUDES := /path/to/include-dir
。
下面是一个例子(从$NDK_ROOT/samples/module-exports/jni/Android.mk
截取):
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := foo/foo.c
LOCAL_CFLAGS := -DFOO=2
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo
LOCAL_EXPORT_CFLAGS := -DFOO=1
LOCAL_EXPORT_LDLIBS := -llog
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := bar
LOCAL_SRC_FILES := bar/bar.c
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar
LOCAL_STATIC_LIBRARIES := foo
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := zoo
LOCAL_SRC_FILES := zoo/zoo.c
LOCAL_SHARED_LIBRARIES := bar
include $(BUILD_SHARED_LIBRARY)
这里,第一库是foo
。它构建为一个静态库(请参阅include $(BUILD_STATIC_LIBRARY)
)。它出口头目录中:
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo
的第二个库是bar
,它是一个共享库(参见LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar
)。当它引用foo
有:
LOCAL_STATIC_LIBRARIES := foo
在foo
头必应搜索仿佛-I$LOCAL_PATH/foo
已指定gcc
。 注意,它也出口自己的头目录中:
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar
第三个库是zoo
,它是一个共享库。它引用了bar
库。这表明共享库可以包含另一个共享库,没有任何问题。
如果这不能解决您的问题,请包含更多配置。
检查此链接http://stackoverflow.com/questions/10593987/android-ndk-linking/10615769#10615769 – codetiger 2012-07-19 06:30:29