2013-01-16 83 views
0

我已經創建了一個.so文件,它通過JNI公開了對Java的本地C調用。這很好,我可以將應用程序部署到我的Android系統,如果我只是在我的C代碼中使用系統庫。但是,如果我想調用其他.so文件中的函數,我無法讓我的項目正確鏈接。例如,假設我有「libotherso.so」文件,其中包含C中定義的API,我可以從用於生成「libMyJNILibrary.so」的「MyJNILibrary.c」代碼調用該文件。將依賴的.so文件與Android的ndk-build鏈接起來

我試圖改變我的Android.mk文件,如下所示:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := MyJNILibrary 
LOCAL_SRC_FILES := MyJNILibrary.c 

LOCAL_LDLIBS += -lotherso 

include $(BUILD_SHARED_LIBRARY) 

但是,當我呼籲這個NDK-建設,我得到發現-lotherso錯誤。我在哪裏放置「libotherso.so」文件,以便ndk-build可以將其提取出來?

感謝您提供的任何幫助。

回答

4
LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := otherso 
LOCAL_SRC_FILES := ../lib/libotherso.so 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := MyJNILibrary 
LOCAL_SRC_FILES := MyJNILibrary.c 
LOCAL_SHARED_LIBRARIES := otherso 
include $(BUILD_SHARED_LIBRARY) 

請注意,LOCAL_SRC_FILES是相對於您的LOCAL_PATH。

不要忘記自己的JNI庫之前加載你的依賴:

static { 
    System.loadLibrary("otherso"); 
    System.loadLibrary("MyJNILibrary"); 
} 
+0

謝謝!我在我的項目中創建了一個名爲「lib」的新目錄,並在那裏複製了libotherso.so文件。我還根據您的建議更新了Android.mk文件,並在「MyJNILibrary」之前加載了「otherso」庫。 ndk-build比以前更進一步,但仍然存在一個錯誤: –

+0

我還應該提到我已經將otherso.h文件複製到MyJNILibrary.c所在的jni文件夾中。我還重新編譯了在調用ndk-build之前加載適當的「javac」和「javah -jni」調用兩個庫的java代碼。我還在做什麼錯了? –

+0

順便說一句,我不是想從我的java代碼中調用「libotherso.so」。我試圖從用於製作「libMyJNILibrary.so」的MyJNILibrary.c代碼中將C調用成「libotherso.so」。 –