C++ OpenCV常见链接error及解决方案,/usr/bin/ld:

undefined reference to `std::cout’

该报错一般原因都是因为编译器问题,例如使用gcc命令编译链接C++文件

gcc -o test ./test.cpp

从源代码文件到可执行文件的过程经过四个环节:预处理,编译,汇编,链接
在这里插入图片描述

gcc可以进行C++文件的预处理,编译,汇编,但是不会主动链接iostream等C++库,所以才会出现这个error

解决办法:
方法一:使用g++命令进行编译

g++ -o test ./test.cpp

方法二:在gcc后添加链接参数 -lstdc++

gcc -o test ./test.cpp -lstdc++

undefined reference to `cv::xxxx

在这里插入图片描述

该报错是指链接器ld无法找到cv的库文件,
解决方法:

gcc ./test.cpp -lstdc++ -lopencv_core -lopencv_highgui -lopencv_imgcodecs
# 或者
g++ ./test.cpp -lopencv_core -lopencv_highgui -lopencv_imgcodecs

注意,cv的库文件是按模块分开的,所以链接也是按模块分开的,cv::Mat这种都是在opencv_core中,imread,imshow这种都是在opencv_highgui中,cvtColor这种都是在opencv_imgproc中。

error adding symbols: DSO missing from command line

该报错的原因是因为链接时添加了A库的链接选项,A库又需要链接B库,但是没有添加B库的链接选项,这种情况下就会出现这个error
解决方法:
看这个报错前面是哪个库,然后把这个库也添加到链接选项中。
eg:

/usr/bin/ld: /usr/local/lib/libopencv_imgcodecs.so.408: error adding symbols: DSO missing from command line

这个报错就是指libopencv_imgcodecs库没有添加到选项,在后面添加-lopencv_imgcodecs选项即可。

如果再报错,那需要查看一下自己的系统上有没有这个库文件,或者这个库文件是否在链接查找路径里面,如果库文件存在,但是没在查找路径里,可以使用-L your_file_path来临时添加查找路径。
如果想要永久添加查找路径,可以在环境变量中添加LD_LIBRARY_PATH环境变量,也可以在/etc/ld.so.conf.d中添加一个conf文件,将路径存储到里面

关于链接

在这里插入图片描述

GCC是由GNU开发的编译器,GCC不仅仅是一个独立的编译工具,还是GNU整个工程的一部分,GNU中的其他软件包括:GNU C语言库glibc,GNU调试工具gdb,GNU二进制工具链binutils(包括:汇编工具as,链接工具ld,目标文件分析工具objdump,objcopy,符号展示工具nm,符号清理工具strip等)。
gcc编译生成可执行文件的过程就是调用这个工具链中其他工具协作完成的过程。像gcc一样,其他工具也可以输入参数,像本文上面提到的-L path和-llibname这种都是传递给链接器ld的参数,通过向这些工具传递参数,我们的编译过程可以更加定制化。
编译的过程一旦出了error,也可以通过参数进行挽救,先根据报错排查是哪个阶段出了问题,再排查根据阶段排查代码问题究竟是逻辑问题还是语法问题。

  • 出现在预处理阶段的error一般都是宏出现了问题,
  • 出现在编译阶段的有可能是拼写问题,也有可能是逻辑问题,大多数的报错都是出现在这个阶段,这个阶段负责进行语法分析和词法分析。
  • 出现在链接阶段的error一般都是跟其他库有关,例如缺库或者库中没有该reference的定义等。
  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值