日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android error: undefined reference to 的错误分析

發布時間:2024/4/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android error: undefined reference to 的错误分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天,簡單講講android 

error: undefined reference to 的錯誤分析。


昨天,做jni,連接so庫時,android studio出現了這個問題。當時不知道是什么原因,后來,查找資料,總算解決了。這里記錄一下。


一般編譯器報 “undefined reference to”的錯誤是以下幾種情況,Android中的makefile是Android.mk命名的。

1 沒有指定對應的庫(.o/.a/.so)?

使用了庫中定義的實體,但沒有指定庫(-lXXX)或者沒有指定庫路徑(-LYYY),會導致該錯誤,?

在Android.mk中 用LDFLAGS參數來定義庫(-lXXX)和?(-LYYY)的


2 連接庫參數的順序不對?

在默認情況下,對于-l 使用庫的要求是越是基礎的庫越要寫在后面,無論是靜態還動態?

我在實際使用的過程中,發現-D參數的使用,也會導致undefined reference to”的錯誤,推薦大家如果想在做宏控制的時候,把-D參數放到最后


3 gcc/ld 版本不匹配?
gcc/ld的版本的兼容性問題,由于gcc2 到 gcc3大版本的兼容性存在問題(其實gcc3.2到3.4也一定程度上存在這樣的問題) 當在高版本機器上使用低版本的機器就會導致這樣的錯誤, 這個問題比較常見在32位的環境上, 另外就在32位環境不小心使用了64位的庫或者反過來64位環境使用了32位的庫.?

這個問題與Linux下幾乎一樣


4 C/C++相互依賴和鏈接?
gcc和g++編譯結果的混用需要保證能夠extern "C" 兩邊都可以使用的接口,在我們的64位環境中gcc鏈接g++的庫還需要加上 -lstdc++,具體見前文對于混合編譯的說明 。

在extern “C”的使用時候,因為我經常需要用JNI鏈接純C語言的庫,我有時候加上extern "C" 還是不行,后來我才發現,extern "C" 必須要包含了頭文件,我在這個問題上糾結了很久,慚愧。


5 運行期報錯?

這個問題基本上是由于程序使用了dlopen方式載入.so, 但.so沒有把所有需要的庫都鏈接上,具體參加上文中對于靜態庫和動態庫混合使用的說明?

關于執行時動態鏈接的問題,我也碰到過很糾結的情況,就是在Android鏈接的庫依賴于我現在當前的庫,就變成了你鏈接我,我再鏈接你,導致死都編不過,最好撇清這種關系



我的問題就是依賴庫的順序不對,導致出現error: undefined reference to 。后來修改了依賴的順序,問題就解決了。這里,只需注意最基本的so庫依賴在最前面,其他不依賴其他so的庫依賴在后面。


android error: undefined reference to 的錯誤分析就講完了。


就這么簡單。

總結

以上是生活随笔為你收集整理的android error: undefined reference to 的错误分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。