2011-03-08 157 views
1

我試圖創建將鏈接到第三方靜態庫靜態庫。 目前我收到的錯誤是鏈接第三方靜態庫到另一個靜態庫

沒有規則,使目標`.../libqqrcLib.a」,由libqqrcAPI.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是使用不同的方法。

而且項重要的聲明,我定義的Application.mk,看起來像這樣:

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

爲了能夠創建一個靜態庫。 (否則我沒有輸出..)

對我來說,目前的問題是即使我有一個單獨的預構建庫模塊,它似乎編譯,我不能產生一個組合的靜態庫,將在其中保存預構建的lib。
我在OBJ \本地\ armeabi目錄的預建庫(qqrcLib.a)和新形成的靜態庫(qqrcAPI.a),但它似乎沒有聯繫的,因爲新的模塊太小...

我在做什麼錯?

有幫助嗎? :)

回答

0

我不認爲你可以使用靜態庫和JNI。您要用作JNI的頂級庫需要共享。

據我理解這個問題,當您添加靜態庫到另一個靜態庫的第二個庫.a文件不包括所有的第一個庫,即你還需要兩個.a文件鏈接,使.so (或其他實際可執行文件)。

一定是有什麼事情,你實際上是試圖利用這些庫的?我認爲解決您的問題的方法來自下一步(可能是.so共享庫)。

+0

你的觀察是正確的。 – Ita 2011-06-05 07:33:39

+0

你的觀察是正確的。我試圖利用NDK構建系統來生成一個靜態庫,我可以將其作爲API發佈。我希望能夠避免使用.so文件,但不幸的是我不能。 – Ita 2011-06-05 07:39:41