【Debug记录】Libtorch部署YOLO时cmake报错--symbol lookup error: .testtest: undefined symbol:

【Debug记录】Libtorch部署YOLO时cmake报错--symbol lookup error: .testtest: undefined symbol:,第1张

环境信息

Ubuntu 18.04 LTS
LibTorch 1.8.1
gcc/g++ 7.5.0
cmake 3.20.0

问题描述

在部署Libtorch进行Yolo系列的C++推理接口实现时,好不容易完成了Libtorch各种令人恼火的版本对应问题完成cmake之后,在运行可执行文件时,报如下奇奇怪怪的错误:

symbol lookup error: ./test/test: undefined symbol: _ZN2at6detail10noopDeleteEPv

Debug过程

在经过大量的cmake调试和修改之后发现这个问题和我的cmake项目配置并没有直接关系,然后想到上次在windows上出现这样一堆乱码的问题时是面对配置Kinect SDK时的软链接出现了问题,对应到Linux下,各种链接库在使用前都要以动态链接的形式为可执行文件提供检索入口,在思考是否是同样的原因导致的这个问题。

解决方法 动态链接库索引检测

在大致确定Debug方向之后,开始调研Linux下如何检测动态链接库,检测方法如下:

在执行cmake编译后产生的可执行文件之前,加上ldd命令进行该文件的动态库检测流程,举例如下:

pcl_test是编译成功后生成的可执行文件,在终端打开对应目录执行命令:

ldd ./pcl_test

这时候会出现一堆运行该文件所需要的动态库,而系统能够正常链接的动态库都会有**=>**的标记,标记链接到的地址,
这里发现其中有一个ld-linux-x86-64.so.2文件没有找到链接地址,这里猜测这是导致程序执行bug的原因。然后对该系统库补充动态链接信息:

系统库动态链接更新

首先,查找系统中该库存在的位置

locate ld-linux-x86-64.so.2


然后确认系统中存在我们需要的库文件,打开/etc/ld.so.conf配置文件:

sudo gedit /etc/ld.so.conf

在文件末尾增加上面找到的路径


最后更新配置:

 sudo /sbin/ldconfig
测试结果

完成上述步骤后再返回来执行之前报错的执行过程和相关文件,可以发现问题顺利解决,到这一步完整完成了基于Libtorch使用C++部署目标检测模型的全部过程,后面就可以进行SLAM项目的下一步对接啦!

总结

以后类似这种symbol lookup error的报错,可以以这种解决思路作为突破口进行debug,动态链接库导致的代码运行错误或中断的问题不容易发现,希望通过这次debug能长长经验…

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1295089.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存