ubuntu20 下編譯16下的鏈接錯誤和解決過程經驗總結


工作項目。本來知道標准的推薦工作環境是ubuntu16,知道有個同事因為驅動的原因裝的是20版本,也能work。我恰好問領導借的U盤是utuntu20版本,於是也安裝的的20版本。其實是失策的。因為git庫有些.so是在16下編譯出來的,而且我拿不到源碼。如果全部是源碼,倒是可以嘗試用20版本。

/usr/bin/ld: ../../../baidu-mapauto-engine/src/engine/dr/mk/lib/opencv/ubuntu/libopencv_imgproc.so: .dynsym local symbol at index 2 (>= sh_info of 2)
/usr/bin/ld: ../../../baidu-mapauto-engine/src/engine/dr/mk/lib/opencv/ubuntu/libopencv_imgproc.so: .dynsym local symbol at index 3 (>= sh_info of 2)

解決這個錯誤,參考了https://blog.csdn.net/wd1603926823/article/details/108245043。

在某個cmake文件中的鏈接選項加了,-fuse-ld=gold,相關內容很容易在網上搜索到。

另外我的/usr/bin/ld 指向  /usr/bin/ld.gold。但這僅僅是解決了編譯錯誤。還有運行錯誤。使用ldd和lddtree工具,來看編譯出來的guide_test依賴什么庫,分別把路徑加入到LD_LIBRARY_PATH中。發現系統同時需要libcrypto.so的兩個版本。於是從ubuntu16上拷貝了老版本,libcrypto.so.1.0.0,放到/usr/local/lib下。

 最難搞定的一個錯誤,是undefined symbol, ....., Qt_5 version,上網多方查找,似乎是和QT有關,但是用挺老的gcc版本編譯出來的。我嘗試過換用不同的gcc編譯器,發現

g++11太新,對有些標准已經不支持了。運行ubuntu16的同事用的編譯器是g++5.4.版本,我打算用apt來安裝g++-5,發現ubuntu20下根本無法安裝
g++-4, g++-6都沒法安裝。最后我是把/opt/Qt5.12.5/5.12.5/gcc_64/lib 放在最前面才解決的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM