我使用独立工具链4.8为Android预构建了升级库。
我想使用他关注boost libs并在Android.mk中添加以下内容
LOCAL_STATIC_LIBRARIES += libboost_atomic \
libboost_date_time \
libboost_exception \
libboost_thread \
libboost_system \
libboost_filesystem
我在Android.mk中添加了我自己的静态lib liblocal.a。
我在android项目的JNI文件夹中有一个mainactivity.cpp文件。
我在mainactivity.h中包含了header.h。 header.h有classA的类声明,它使用boost libs。
在构建liblocal.a时,我没有收到任何链接错误。
在mainactivity.h中包含header.h时,我收到以下链接错误:
../../../3p/boost/android/include/boost/system/error_code.hpp:222: error: undefined reference to 'boost::system::generic_category()'
../../../3p/boost/android/include/boost/system/error_code.hpp:223: error: undefined reference to 'boost::system::generic_category()'
../../../3p/boost/android/include/boost/system/error_code.hpp:224: error: undefined reference to 'boost::system::system_category()'
../../../3p/boost/android/include/boost/system/error_code.hpp:222: error: undefined reference to 'boost::system::generic_category()'
../../../3p/boost/android/include/boost/system/error_code.hpp:223: error: undefined reference to 'boost::system::generic_category()'
../../../3p/boost/android/include/boost/system/error_code.hpp:224: error: undefined reference to 'boost::system::system_category()'
../../../3p/boost/android/include/boost/system/error_code.hpp:224: error: undefined reference to 'boost::system::system_category()'
谢谢, Birajendu
答案 0 :(得分:1)
如果liblocal.a依赖于libboost_foo.a中定义的函数,那么它必须在之前出现在静态库列表中,即:
LOCAL_STATIC_LIBRARIES += liblocal.a libboost_foo.a # GOOD
应该有效,而以下内容:
LOCAL_STATIC_LIBRARIES += libboost_foo.a liblocal.a # BAD
不会,并导致链接错误,如您所描述的那样。
解决方法是使用LOCAL_WHOLE_STATIC_LIBRARIES,它总是强制列出的静态库中的所有内容都包含在结果中(这通常会生成膨胀的二进制文件,但如果您有循环依赖项,则可能是必需的。)
希望这有帮助。
答案 1 :(得分:0)
解决:
我添加了LOCAL_LDLIBS + = -L $(RELATIVE_PATH_TO_LIB)-lmylib -lmylib1,这解决了这个问题。 其中mylib.a和mylib1.a是我的预构建静态库。