0

我正在尝试将我的库包含libtest.so到另一个库中。

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 := testLOCAL_SHARED_LIBRARIES := libtest足以使用该库。

我错过了什么?

4

2 回答 2

0

将包含 myinclude.h 的目录添加到 LOCAL_C_INCLUDES:

LOCAL_C_INCLUDES += /dir/to/your/include/files/
于 2012-07-20T08:48:16.690 回答
0

由于库有责任告诉您要包​​含的内容,尽管它可能会暂时解决问题,但使用LOCAL_C_INCLUDES指定由其他人编写的包含文件(如Gavin 的回答中所建议)在可维护性方面并不是一个好主意。

问题之一是您的问题是Android.mk文件libtest未正确写入。如果它导出任何头文件,您应该添加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图书馆。这表明一个共享库可以毫无问题地包含另一个共享库。

如果这不能解决您的问题,请包含更多配置。

于 2013-03-16T15:39:49.883 回答