栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

环境信息

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能长长经验…

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923255.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号