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 放在最前面才解决的。

原文地址:https://www.cnblogs.com/tangxiaosheng/p/15514997.html