链接器无法找到OpenCV函数:undefined reference与DSO缺失报错求助
解决Qt项目OpenCV链接错误方案
错误根因
最初的
undefined reference和cannot find -lopencv_*报错是因为你只配置了OpenCV头文件搜索路径,没有配置库文件搜索路径。后续出现的DSO missing from command line报错,本质是链接器虽然找到了libopencv_videoio.so.4.1库,但存在依赖链缺失、库版本不匹配或库搜索路径配置错误的问题。手动复制库文件到/usr/lib属于不规范操作,极易引发版本冲突和依赖缺失。
分步解决操作
- 第一步:先删除你手动复制到
/usr/lib目录下的所有OpenCV相关库文件,避免后续多版本冲突。 - 第二步:修改你的
.pro配置文件,补充OpenCV库文件的搜索路径,路径替换为你实际存放OpenCV编译生成的lib目录路径:
# 补充库搜索路径,放在现有LIBS配置之前 LIBS += -L/home/pi/temp/opencv4/lib
如果你不确定OpenCV库的存放路径,可以执行
find /home/pi/temp -name "libopencv_core.so*"查找对应路径。
- 第三步(推荐配置,可避免手动写链接库漏项错误):
直接通过pkg-config自动引入完整的OpenCV编译配置,替换你现有LIBS里的所有opencv相关链接项:
# 先指定opencv4.pc文件所在的pkgconfig目录路径,替换为你实际路径 PKG_CONFIG_PATH = /home/pi/temp/opencv4/lib/pkgconfig # 自动引入opencv4的所有头文件、库路径、链接库配置 PKGCONFIG += opencv4
- 第四步:修改完配置后必须清理旧编译缓存,重新生成Makefile再编译:
make clean qmake make
额外排查点
如果修改后仍报DSO missing错误,可执行以下命令检查库的软链接和依赖是否正常:
# 检查libopencv_videoio.so软链接是否指向正确的4.1版本 ls -l /home/pi/temp/opencv4/lib/libopencv_videoio.so # 检查该库的所有依赖是否都能被找到 ldd /home/pi/temp/opencv4/lib/libopencv_videoio.so.4.1
如果存在软链接缺失,执行ln -s libopencv_videoio.so.4.1 libopencv_videoio.so在对应lib目录下创建软链接即可。
内容的提问来源于stack exchange,提问作者brandon
相关产品推荐
相关产品推荐

