当前位置: 首页 > article >正文

安装海康威视相机SDK后,catkin_make其他项目时,出现“libusb_set_option”错误的解决方法

硬件:雷神MIX G139H047LD 工控机

系统:ubuntu20.04

之前运行某项目时,处于正常状态。后来由于要使用海康威视工业相机(型号:MV-CA013-21UC),便下载了并安装了该相机的SDK,之后运行原本正常的项目,就会出现以下错误:

/usr/bin/ld: …/…/lib/libpcl_io.so.1.8.0: undefined reference to `libusb_set_option’

 由于该错误中出现了 libpcl,错误以为是前期安装编译pcl存在问题,故开始进行pcl1.8.1版本的安装和编译,这个过程中出现了很多error,再全部解决之后,终于pcl编译成功了,

 原本以为这次可以顺利通过项目编译,但是再次出现了“/usr/bin/ld: …/…/lib/libpcl_io.so.1.8.0: undefined reference to `libusb_set_option’”的error,思考之后,觉得可能是海康威视相机SDK导致的该错误。正好看到以下文章,也是解决这个错误,便借鉴了以下文章。

https://blog.csdn.net/qq_40301351/article/details/144818802?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522feb47a6e9229e901500bcd662d336f6f%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=feb47a6e9229e901500bcd662d336f6f&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-144818802-null-null.142^v101^pc_search_result_base7&utm_term=undefined%20reference%20to%20%60libusb_set_option&spm=1018.2226.3001.4187https://blog.csdn.net/qq_40301351/article/details/144818802?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522feb47a6e9229e901500bcd662d336f6f%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=feb47a6e9229e901500bcd662d336f6f&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-144818802-null-null.142^v101^pc_search_result_base7&utm_term=undefined%20reference%20to%20%60libusb_set_option&spm=1018.2226.3001.4187

出现上述error的原因在于:

安装海康相机SDK后,系统原本的 libusb 依赖会被重新链接到海康SDK指定的路径。由于 libusb 是许多外设程序的重要依赖库,这种更改可能导致其他设备驱动或程序(例如使用系统默认 libusb 的程序)出现冲突,从而引发上述错误。

解决方法:

1、查看环境变量配置

echo $LD_LIBRARY_PATH

在终端运行上述命令后,输出:

jiangqiang@jiangqiang:~$ echo $LD_LIBRARY_PATH 

/home/jiangqiang/jiangqiang/wk/livox_ros_driver_ws/devel/lib:/opt/ros/noetic/lib:/opt/MVS/lib/64:/opt/MVS/lib/32:/usr/lib/x86_64-linux-gnu:/opt/MVS/lib/64:/opt/MVS/lib/32:/opt/MVS/lib/64:/opt/MVS/lib/32:/usr/local/cuda-12.3/lib64

 出现了包含“MVS”字母的环境变量,这些代表的是海康威视(Hikvision)MVS(Machine Vision Software)的库路径,而且LD_LIBRARY_PATH 的顺序决定了动态库的查找优先级。位于前面的MVS路径会优先被查找,因此项目原本使用的默认动态库的链接路径/usr/lib/x86_64-linux-gnu无法找到。因此报错。

2、打开bashrc

sudo gedit ~/.bashrc

通过搜索将出现“MVS”的所在语句全部注释掉,同时,在文件末尾添加以下一行:

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

 /usr/lib/x86_64-linux-gnu 是系统默认的 libusb 路径。如果有多个默认路径,请确保所有可能的系统库路径都在 LD_LIBRARY_PATH 变量中优先级靠前。

3、保存bashrc文件

source ~/.bashrc

4、重新在工作空间中编译,编译能够顺利通过。

注意:以上这种方式存在不足,具体在于:如果这个项目同时需要用到海康威视相机时,通过上述方法会导致相机不可用,这种情况下,还可以在CMakeLists.txt中设置项目的链接路径。

即:在 CMakeLists.txt 中设置链接 libusb 的路径为 /usr/lib/x86_64-linux-gnu

使用 find_package 查找 libusb:

CMake 提供了 find_package 来查找系统安装的库。对于 libusb,可以使用以下代码:

find_package(libusb REQUIRED)

 然后将bashrc里面的有关“MVS”的语句的注释全部取消。

运行项目代码,可以正常运行。


http://www.kler.cn/a/552520.html

相关文章:

  • DeepSeek R1生成图片总结2(虽然本身是不能直接生成图片,但是可以想办法利用别的工具一起实现)
  • word$deepseep
  • 用deepseek学大模型03-数学基础 概率论 最大似然估计(MLE)最大后验估计(MAP)
  • DeepSeek告别服务器繁忙
  • 应急响应(linux 篇,以centos 7为例)
  • Linux、Docker、Redis常见面试题
  • MybatisMybatisPllus公共字段填充与配置逻辑删除
  • LLaMa-Factory部署及llamafactory-cli webui命令无法打开ui界面问题解决记录
  • 【触想智能】工业显示器和普通显示器的区别以及工业显示器的主要应用领域分析
  • Leetcode2080:区间内查询数字的频率
  • SpringCloud面试题----为什么会产生Eureka的自我保护, 如何关闭自我保护机制
  • docker 安装的open-webui链接ollama出现网络错误
  • 阿里云大文件ossutil工具进行上传下载,该工具支持断点续传
  • mysql开启gtid并配置主从
  • eNSP防火墙综合实验
  • AI与大数据:双剑合璧的智能革命
  • 什么是UV环形光源
  • Flutter 状态管理:详细分析与实战
  • python爬虫系列课程2:如何下载Xpath Helper
  • 文件夹上传到github分支最后github上面还是没有文件和文件夹