如果你在使用海康威视摄像头时遇到了编译报错的问题,可能是链接库的路径配置不正确。下面是解决这个问题的步骤和原理:
1. 克隆海康摄像头驱动代码
首先,你需要将海康摄像头的驱动代码克隆到你的工作空间中。使用以下命令:
git clone https://github.com/guangqianzhang/hika_ros.git
2. 编译报错
在编译过程中,你可能会遇到类似以下的错误:
/usr/bin/ld: cannot find -lhcnetsdk
/usr/bin/ld: cannot find -lPlayCtrl
collect2: error: ld returned 1 exit status
这些错误表明编译器找不到相应的链接库。
3. 找不到链接库的解决方法
解决办法可以参考这篇博客中提到的方法,它解释了在Linux下编译C或C++文件时可能会遇到找不到链接库的问题。
原理是这么个原理,但是解决不了上面出现的编译问题,我把原理梳理一下:
① 链接库文件存在于usr/lib
目录下
如果链接库文件存在于usr/lib
目录下,你可以使用以下命令修复链接:
ln -s lib***.so.6(某个数字) lib***.so
例如:
ln -s libhcnetsdk.so.6 libhcnetsdk.so
ln -s libPlayCtrl.so.6 libPlayCtrl.so
② 链接库文件不存在于usr/lib
目录下
如果链接库文件不存在于usr/lib
目录下,你需要在系统根目录中搜索这些库文件,并使用以下命令将其复制到usr/lib
目录下:
sudo cp 库文件名 /usr/lib
例如:
sudo cp libhcnetsdk.so /usr/lib
sudo cp libPlayCtrl.so /usr/lib
分割线============================================
最终参考这篇博客的思路解决上面的问题:
根据上面的提示:提示找不到相关库文件
其实在程序包中是有相关库文件的,只是系统在编译的时候找不到,尝试了很多种办法之后,决定直接复制到/usr/lib下面
解决办法如下:
复制库文件
1、在/usr/lib/ 下面创建一个文件夹hik
sudo mkdir hik
2、在自己包下面的库文件中打开终端,准备复制
root@1bbaa109b262:/home/user/calibration/ros_ws/src/hika_ros/src/hikan_robot-B/lib# sudo cp -i libhcnetsdk.so /usr/lib/hik/
root@1bbaa109b262:/home/user/calibration/ros_ws/src/hika_ros/src/hikan_robot-B/lib# sudo cp -i libPlayCtrl.so /usr/lib/hik/
4. 问题终止线
在执行上述步骤后,无论是在容器中创建还是在容器外创建,还是不能够catkin_make,还是会报一样的错误.
回归本质找问题,仔细看报错问题,应该是CMaklist文件链接不到相应的库,所以回头去看CMakelist文件
link_directories(../../../hikan_robot-B/src/hikan_robot-B/lib)
这一句有问题,路径不对
应该是
link_directories(../../../hika_ros/src/hikan_robot-B/lib)
这样编译就能顺利过.
5. 启动摄像头节点
最后,使用以下命令启动摄像头节点:
source devel/setup.bash
roslaunch hikvision_ros hik.launch
至此,应该能够成功驱动海康摄像头了。希望能够解决大家在实际工程中遇到的问题。