2011-12-20 121 views
0

我編譯紅襪等與NDK。所以,我擁有所有Android友好的共享庫。的Android NDK連接問題

我做了一個simple test file它調用一個函數SOX。 NDK構建告訴我:

undefined reference to `sox_open_read' 

sox_open_read在sox.h.定義我知道這是發現sox.h,因爲它給了我一個關於該文件警告:

In file included from (...)/sox/sox.h:19 

所以,或許是要在實際libsox.so sox_open_read找到。那麼,我已經嘗試了大約100種不同的方式來告訴它sox共享庫在哪裏 - 我要動態鏈接

#LOCAL_SHARED_LIBRARY := sox 
LOCAL_STATIC_LIBRARIES := sox 
LOCAL_LDLIBS := -L$(LOCAL_PATH_FULL)/jni/libs/libsox.so 

這是我的理解,我不想staticly鏈接到SOX LIB:

LOCAL_SHARED_LIBRARY := sox 
LOCAL_LDLIBS := -L$(LOCAL_PATH_FULL)/jni/libs/libsox.so 

但是,如果我指定紅襪作爲靜態庫它將工作到它。

回答

1

您應該定義爲libsox.so預建圖書館。創建一個makefile如下所示,把你的預建libsox.so在同一目錄與此生成的文件。之後,您可以使用與重建它相同的libsox。不要忘記將這個makefile包含到你的構建中。

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := libsox 
LOCAL_SRC_FILES := libsox.so 

include $(PREBUILT_SHARED_LIBRARY) 
+0

感謝您的幫助。然而,這不是問題。我已經定義的所有庫作爲預建這樣的:http://pastebin.com/de0u99tu – Matt 2011-12-23 16:39:34

+0

我認爲[這](http://stackoverflow.com/questions/3549432/preventing-functions-from-being從靜態庫中提取 - 何時鏈接)可能是您的問題。在libsox構建過程中,您嘗試從libsox中使用的函數可能會被剝離。你可以使用nm命令來檢查它。 – vassilij 2011-12-24 18:31:52