2012-06-14 44 views
2

我有一個.so文件,該文件被AOSP系統軟件包中的其他項目引用。 爲了使引用成爲可能,我在AOSP/external包中創建了一個新項目,其中包含兩個文件,即Android.mk和xyz.so文件。 Android.mk如下所示。放置.so文件的位置,以便它包含在最終版本中

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE := customutil 
LOCAL_SRC_FILES := xyz.so 
include $(PREBUILT_SHARED_LIBRARY) 

在編譯期間,它給我下面的錯誤。

化妝:*沒有規則,使目標out/target/product/crespo/obj/lib/customutil.so', needed by出/目標/產品/克雷斯波/ OBJ /可執行文件/ abc_agent_intermediates /聯/ abc_agent」。停止。

我應該在哪裏保存xyz.so文件或我應該做什麼修改,以便在構建AOSP時不會出現此錯誤?


蘇希爾

+0

如果您正在尋求建立一個獨立的lib.so文件,你使用它的主要的lib中。所以這個答案可能有助於一步跟蹤。 http://stackoverflow.com/questions/10593987/android-ndk-linking/10615769#10615769 – codetiger

+0

錯誤消息看起來可疑。我期望一個關於lib/libcustomutil.so的消息,但是如果你得到lib/customutil.so,那麼你可能對於abc_agent有一個錯誤的Android.mk。 –

回答

1

你的模塊規則是一個問題。

當你有LOCAL_MODULE := customutil預建庫,鏈接器將獲得額外的標誌-lcustomutil。因此,你需要LOCAL_SRC_FILES :=LOCAL_SRC_FILES := libcustomutil.so

因此Android.mk部分應該是:

# Prebuilt Lib 
include $(CLEAR_VARS) 
LOCAL_MODULE := xyx 
LOCAL_SRC_FILES := libxyz.so 
include $(PREBUILT_SHARED_LIBRARY) 

這也意味着,你需要到圖書館適當重命名或根據庫名設置的模塊名稱。

0

默認情況下,prebuilts,LOCAL_SRC_FILES是相對於當前的LOCAL_PATH定義,所以如果你的Android.mk是$PROJECT/jni/Android.mk下,你應該把它放在$PROJECT/jni/xyz.so

的名字也應該是可能的libxyz.so代替xyz.so(儘管這可能沒有lib前綴)。

如果你計劃支持多個CPU的ABI,嘗試使用一個子目錄,如:

include $(CLEAR_VARS) 
LOCAL_MODULE := libxyz 
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libxyz.so 
include $(PREBUILT_SHARED_LIBRARY) 

和地點下的文件:

$PROJECT/jni/armeabi/libxyz.so 
$PROJECT/jni/armeabi-v7a/libxyz.so 
$PROJECT/jni/x86/libxyz.so 
... 

最後,您還可以使用LOCAL_SRC_FILES的絕對路徑,構建系統將從那裏選擇文件。

0

我說我的預建在AOSP源代碼外部文件夾.so文件如下: -

第1步: - 我已創建了一個文件夾(讓說myLibs)AOSP 的外部文件夾內,然後我說我在。所以它文件,並加入以下在Android.mk代碼文件

# Prebuilt Lib 
LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE := libMyabc # your lib name 
LOCAL_SRC_FILES := libMyabc.so 
    # your lib .so file name 
include $(BUILD_SHARED_LIBRARY) 

然後我在框架/鹼/型芯/ JNI/Android.mk在LOCAL_SHARED_LIBRARIES節文件加入我的共享庫的名字。

現在它是我的一代。所以文件輸出/目標/產品/通用/ OBJ/lib文件夾

感謝 編碼快樂......

相關問題