凡亿教育-许媛
凡事用心,一起进步
打开APP
公司名片
凡亿专栏 | 库链接顺序错了,不用硬啃undefined reference
库链接顺序错了,不用硬啃undefined reference

链接C++项目时弹出一长串undefined reference报错,反复核对库文件路径都正确,就是无法链接成功。这类问题大多是静态库、动态库的链接顺序不符合依赖规则导致的。

42.png

1. 按依赖关系排序

被依赖的库必须放在依赖它的库的后面。

比如A库用到了B库的函数,就要把B写在A的后面,让链接器能顺着顺序找到所有符号,不会出现找不到定义的报错。

2. 用--start-group包裹循环依赖

遇到两个库互相依赖的循环场景,用链接参数--start-group和--end-group把所有相关库包起来。

链接器会在组内反复扫描所有符号,自动解开循环依赖,不用反复调整顺序试错。

3. 显式指定全路径

不要只写-lxxx的简写形式,直接传入库文件的完整绝对路径。

避免链接器在默认搜索路径里找到错误版本的库,从根源排除路径错位带来的符号缺失问题。

4. 用nm工具排查

用nm命令查看库文件里的符号导出情况。

确认报错的未定义符号到底在哪个库里,直接把对应库放到链接序列的正确位置,不用盲目调整所有库的顺序。


本文凡亿教育原创文章,转载请注明来源!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论