安装海康威视相机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、查看环境变量配置

bash 复制代码
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

bash 复制代码
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文件

bash 复制代码
source ~/.bashrc

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

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

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

使用 find_package 查找 libusb:

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

bash 复制代码
find_package(libusb REQUIRED)

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

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

相关推荐
查理零世4 分钟前
【蓝桥杯集训·每日一题2025】 AcWing 6134. 哞叫时间II python
python·算法·蓝桥杯
仟濹4 分钟前
【二分搜索 C/C++】洛谷 P1873 EKO / 砍树
c语言·c++·算法
紫雾凌寒13 分钟前
解锁机器学习核心算法|神经网络:AI 领域的 “超级引擎”
人工智能·python·神经网络·算法·机器学习·卷积神经网络
京东零售技术37 分钟前
AI Agent实战:打造京东广告主的超级助手 | 京东零售技术实践
算法
weixin_387002151 小时前
Openssl之SM2加解密命令
安全·ubuntu·密码学·ssl·命令模式
MiyamiKK572 小时前
leetcode_位运算 190.颠倒二进制位
python·算法·leetcode
C137的本贾尼2 小时前
解决 LeetCode 串联所有单词的子串问题
算法·leetcode·c#
张海森-1688202 小时前
ubuntu20.04重启后不显示共享文件夹
ubuntu
默凉2 小时前
Ubuntu 20.04源码安装opencv 4.5.0
opencv·ubuntu
青橘MATLAB学习2 小时前
时间序列预测实战:指数平滑法详解与MATLAB实现
人工智能·算法·机器学习·matlab