2014-04-02 44 views
3

我複製到libsonivox.so /平臺/ Android的14 /弓臂/ usr/lib目錄/,我android.mk文件是:鏈接沒有發現

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE := midi 
LOCAL_SRC_FILES := midi.c 
LOCAL_LDLIBS += -lsonivox 
include $(BUILD_SHARED_LIBRARY) 

但是當我運行ndk-建立我得到這個錯誤:

/home/sebastian/ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lsonivox 

任何想法我做錯了什麼?謝謝!

PS:這可能看起來像一個DUP職位,但我閱讀有關此主題的所有其他職位,他們沒有幫助

+0

是你拉你的平臺庫的目錄嗎?你確定?絕對路徑「/ platforms」似乎不符合你的ndk安裝本身的路徑「/ home/sebastian/ndk」。如何使用-L標誌來指定可以找到它的目錄。爲什麼不把它放在你的項目目錄中,而不是用自定義文件污染ndk安裝? –

+0

對於我所瞭解的(這並不多,我剛剛學習NDK)libsonivox.so已經在系統目錄中的所有設備中,因此Android.mk正在嘗試創建該文件的鏈接。我正在關注一個我在網上找到的例子,它與我想要的ndk類似。 我錯過了一部分路徑,/平臺是在ndk目錄內 – sebgar

+0

是libsonivox認爲公共API還是私有?如果私有(如在設備上,但在ndk發行版中沒有匹配的.a文件),請記住,強烈建議您不要嘗試使用它,因爲它的詳細信息可能會在不通知設備或構建的情況下更改建立。 –

回答

2

請用全路徑替換LOCAL_LDLIBS。

LOCAL_LDLIBS  := $(LOCAL_PATH)/jniLibs/lsonivox.so \\path to the lsonivox 
+0

這可能有效,但我的目標是創建一個鏈接到系統庫,而不是自己包含庫。因此,LOCAL_LDLIBS與-l選項 – sebgar

+0

但是這是*不*系統庫*的ndk *,所以它應該在您的項目文件夾。否則,如果你升級/重新安裝工具鏈,它會中斷。 –

+0

這是一個很好的答案。通過在'platform'之外尋找'LOCAL_LDLIBS',你並不意味着這個庫會被添加到你的APK中,或者被鏈接到你的二進制文件中。準備好NDK將發出警告,告知非NDK庫以這種方式鏈接。 –

0

是的,它似乎有一些問題,你的路徑。但是,使用任何預建的第三方庫的首選方法是使用include $(PREBUILT_SHARED_LIBRARY)方法。

因此,我想這可能是大部分的副本:

NDK: How to include Prebuilt Shared Library Regardless of Architecture

這種方法的另一個非常好的好處是,如果預建庫有任何關聯的頭,你可以將它設置這樣NDK構建系統將爲您傳播包含路徑。這是非常好的。