环境信息

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

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

  1. linux 32位系统运行eclipse报错:eclipse: symbol lookup error,.so: undefined symbol: XXXg_bus_own_name

    接上一个文章寻找合适的eclipse linux32位软件安装包之后https://blog.csdn.net/fighting_Kitty/article/details/127412246,运行e ...

  2. pycharm中python调用百度aip所遇问题解决方案记录:pip安装时版本报错以及aip导入时报错no module named aip/requests)

    pycharm中python调用百度aip所遇问题解决方案记录:pip安装时版本报错以及aip导入时报错no module named aip/requests pip安装时版本报错 pip升级后安装 ...

  3. PHP连接MySQL报错:Fatal error: Call to undefined function mysql_connect()之解决方法

    来源:http://www.blogjava.net/koradji/articles/336713.html [问题描述] PHP测试连接MySQL的程序如下: <?php $host='lo ...

  4. 运行php代码报错如下Uncaught Error: Call to undefined function curl_init()

    运行php代码报错如下Uncaught Error: Call to undefined function curl_init() 前提要配置好php环境变量,cmd执行php -m查看模块信息 缺少 ...

  5. 命令行用impdp导入oracle时,报错ORA-02374: conversion error loading table “XXXX“.“XXXX“ ORA-12899: value……

    命令行用impdp导入oracle时,报错: ORA-02374: conversion error loading table "XXXX"."XXXX" O ...

  6. 【错误记录】Android 编译时技术报错 ( 注解处理器 process 方法多次调用问题 )

    文章目录 一.报错信息 二.问题分析 三.解决方案 注解处理器 AbstractProcessor 中的 process 方法可能会调用多次 , 在生成代码时 , 一定要注意 , 检测到 注解节点 后 ...

  7. 替换openjdk的版本时遇到报错Transaction check error

    x想要使用jmap对jvm内存进行排查问题,但是默认安装的openjdk包中并不带有这个命令,需要新升级到新版本才有 而在安装新的版本时,遇到报错: :   file /usr/lib64/libns ...

  8. PHP socket:执行报错PHP Fatal error: Call to undefined function socket_create()

    1 背景介绍 首次学习socket通信,因为稍微熟悉一点PHP语言,就用PHP写了客户端程序和服务端程序.但是当我打开cmd,然后运行程序的时候发现报错了,如下图. 错误:未定义socket_crea ...

  9. 记录EVE-NG抓包时wireshark报错Connection abandoned.

    1.找到EVE-NG安装的位置 默认安装位置是C:\Program Files\EVE-NG 进入命令行 echo y | .\plink.exe -ssh -l USERNAME -pw PASSW ...

  10. 【报错】unhandled error during execution of watcher callback

    文章目录 报错 分析 解决 报错 unhandled error during execution of watcher callback 分析 在使用Echarts图标绘制数据时,报错:unhand ...

最新文章

  1. 【linux】Valgrind工具集详解(四):抑制错误
  2. MySQL 8.0新特性之原子DDL
  3. js中every用法_js数组中的方法 some, every, filter, find,map, reduce讲解及使用场景
  4. WinForm DataGridView 绑定泛型List(ListT)/ArrayList不显示的原因和解决
  5. 让Jackson JSON生成的数据包含的中文以unicode方式编码
  6. Machine Learning - XIII. Clustering聚类 (Week 8)
  7. 无线充电发热解决办法
  8. 新闻发布系统数据库设计
  9. 计算机英语构词法,计算机专业英语的构词方法论文
  10. MYSQL数据库(九)- 修改数据表名称、列名称
  11. CoolEdit导出片段文件
  12. Spotify大规模敏捷之路
  13. 滴答顺风车怎么抢90%以上的订单_想来赚顺风车钱的补课内容都给你准备好了
  14. 设置chrome浏览器的开发调试工具主题为dark模式
  15. SMC 电气比例压力阀ITV型号索引及操作排故手册
  16. Linux中运行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。
  17. Java Debug Interface(JDI)介绍和使用JDI调试程序
  18. Python中的单引号和双引号 的使用有什么区别
  19. C#中DTE的概念和用法
  20. keil勾选了create hex flie还是没有hex文件,求解答

热门文章

  1. sql服务器注册表被禁用,彻底删除SQL Server注册表信息
  2. 微分几何 Class 3 曲线,曲率与挠率
  3. C语言炫酷的文件操作
  4. 小龙教你轻轻松松配置好JAVA的JDK文件(环境变量,用JDK 7为例),大家都能学会的啦
  5. cordova的ios版本cordova-ios4.4.0已经不支持iOS8
  6. 记一次查深圳磨房百公里徒步照片历程
  7. 删除表记录(delete from where )
  8. lambda表达式最实用的例子,最实用的案例
  9. 用oracle做九九乘法表,Oracle三种循环例题:打印九九乘法表
  10. ES6,ES5,ES3,对比学习~