将第三方静态库链接到另一个静态库

时间:2011-03-08 16:41:13

标签: android-ndk static-libraries static-linking

我正在尝试创建一个链接到第三方静态库的静态库。 目前我收到的错误是

  

libqqrcAPI.a

需要制作目标`... / libqqrcLib.a'的规则

通过更新到支持使用预建库的新版NDK来解决这个问题(5b)

这是我正在使用的Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := qqrcLib  
LOCAL_SRC_FILES := libqqrc.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/coreLib/include

include $(PREBUILT_STATIC_LIBRARY)


include $(CLEAR_VARS)

LOCAL_CPP_EXTENSION := cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/qqrc/ 
LOCAL_MODULE    := qqrcAPI
LOCAL_SRC_FILES := qqrcEngineImpl.cpp 
LOCAL_STATIC_LIBRARIES := qqrcLib

include $(BUILD_STATIC_LIBRARY)

基本上我有一个qqrc.a静态库,我已经为它声明了一个模块“qqrcLib”。
我希望能够将它链接到名为“qqrcAPI”的第二个模块(它在qqrcEngineImpl.cpp中被引用)
由于libqqrc.a是使用不同的方法编译的,因此将它放在这2种库格式中非常重要。

同样重要的是声明我定义了一个看起来像这样的Application.mk:

APP_MODULES      := qqrcAPI 
APP_PROJECT_PATH := $(call my-dir)./..

为了能够创建静态库。 (否则我没有输出..)

当前的问题对我来说,即使我有一个单独的模块用于预构建的库并且似乎编译,我也无法生成一个组合的静态库来保存预先构建的库它。
我在obj \ local \ armeabi目录下有预构建的库(qqrcLib.a)和新形成的静态库(qqrcAPI.a),但它似乎没有链接,因为新模块太小了......

我做错了什么?

帮助? :)

1 个答案:

答案 0 :(得分:0)

我认为你不能使用静态库和JNI。您将要用作JNI的顶级库需要共享。

据我所知,当你将静态库添加到另一个静态库时,第二个库.a文件不包含所有第一个库,即你仍然需要链接{{1生成.a(或其他实际可执行文件)的文件。

你必须尝试使用​​这些库吗?我认为您的问题的解决方案来自下一步(可能是.so共享库)。