1. 程式人生 > >使用NDK編譯的時候出現 undefined reference to

使用NDK編譯的時候出現 undefined reference to

引用 eight body 含義 的區別 flow cell ndk-build vat

最近一段時間在使用NDK進行編譯的時候一直出現undefined reference to的問題

代碼寫的沒有問題, 在visual studio中也能找到定義, 可是在NDK中就是出現這個問題過不去.

使用nm, objdump 查看.o文件也是發現就是那幾個函數未定義;

多番GOOGLE之下 找到了問題所在

解決問題: 在android.mk中加入 LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

引用:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Add the line

LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

to the Android.mk file and it should work. As explained in the ndk doc, it is because the ndk performs a debug checking even for avoiding runtime linking error and for some motivations it doesn‘t find the correct references in a pre-built library. Hope it coulds help.

http://stackoverflow.com/questions/7209971/ndk-build-undefined-reference-to-errors-when-statically-linking-to-libxml-a

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

PS:

Android.mk文件來向NDK編譯系統描述你的源代碼
Application.mk文件向NDK編譯系統描述你的應用程序需要的原生代碼。

nm輸出字符 含義
R Read only symbol. 比如在代碼中有一個const MAXDATA = 3095; 則MAXDATA就是一個Read only symbol
N 這是一個調試符號
D 這是一個已經初始化的變量的符號。比如代碼中int i = 1和char *str = "Hello"則i和str都是這種類型的符號
T Text段的符號。子程序都是這種符號,比如文件中實現了一個函數function,則function就是這種符號
U 未定義的符號。如果文件中引用了不存在的函數,則這些未定義的函數符號就是這種類型
S 未初始化的符號,比如全局變量int s;則s的符號就是此類型

objdump -j .text -Sl objtest | more
-S 盡可能反匯編出源代碼,尤其當編譯的時候指定了-g這種調試參數時,
效果比較明顯。隱含了-d參數。
-l 用文件名和行號標註相應的目標代碼,僅僅和-d、-D或者-r一起使用
使用-ld和使用-d的區別不是很大,

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net

使用NDK編譯的時候出現 undefined reference to