调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)

这篇具有很好参考价值的文章主要介绍了调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

记录OpenCV正确安装与调用过程

我的CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.18)
project(test)
 
set(CMAKE_CXX_STANDARD 11)
# set(OpenCV_DIR "XXX") 
# xxxx目录包含OpenCVConfig.cmake
set(OpenCV_DIR "G:\\opencv\\mingw64_build")

# 寻找OpenCV库
find_package( OpenCV REQUIRED )
 
# 添加头文件
include_directories( ${OpenCV_INCLUDE_DIRS} )
 
# 链接OpenCV库
add_executable(test test01.cpp)
target_link_libraries(test ${OpenCV_LIBS})

cpp代码如下:

#include <iostream>
#include <fstream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;

int main()
{
    Mat images;
    images = imread("1.jpg",0);
    cv::Mat grayim;
    Size dsize = Size(120, 160);
    Mat shrink;
    resize(images, shrink, dsize, 0, 0, INTER_AREA);
    imwrite("after.jpg", shrink);
    cout<<"处理完成!"<<endl;
    return 0;
}

因为我的c++程序采用mingw64编译,所以使用

cmake -G "MinGW Makefiles" ..       // 相当于cmake ..
mingw32-make                       // 相当于make

之后,总是出现undefined reference to cv::Mat::Mat()等一系列的undefined reference to XXX
原因是没有正确链接到动态库。或者之前有安装其他版本的opencv

解决办法

重新编译一份OpenCV的源码再使用

调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)
编译过程参考:
https://blog.huihut.com/2018/07/31/CompiledOpenCVWithMinGW64/
https://github.com/huihut/OpenCV-MinGW-Build
第二个链接提供了已经有编译好opencv库,使用这个编译好的库的前提是自己的环境和作者的环境一样。所以还是自己编译吧。否则到最后会出现下图这样的问题:
调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)
这个错误是我下载上面链接提供的opencv库,cmake 、make 都没问题,最后执行可执行文件时,出现的错误。
其实就是版本的问题,后来我自己编译出来的动态库就是libopencv_core460.dll。就没有这样的问题。

最后还要添加环境变量
将bin目录加到系统的环境变量PATH里,方便程序在运行时能够找到对应的动态库。
将bin(G:\opencv\mingw64_build\bin)目录下的所有.dll文件复制到C:\Windows\System32目录下, 否则会出现无法定位程序输入点…于动态链接库…上。如下图:
调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)
最后程序正常运行。

调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)
调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)

在这之前还将/Mingw/bin目录下的libstdc+±6.dll文件放在了C:\Windows\System32目录下。不知道有没有发挥这个作用,也懒得验证了。

ubuntu也是一样的,gcc, g++版本样一样,编译自己写的程序使用的gcc/g++版本要和编译opencv库时使用的gcc/g++版本要一样。

如有错误之处,欢迎指正!

感谢以下博文:
https://stackoverflow.com/questions/69338088/error-while-configuring-cmake-project-running-nmake-failed

https://blog.csdn.net/qq_45662588/article/details/115949733

https://blog.csdn.net/diaolunlaoshi/article/details/117451891

https://blog.huihut.com/2018/07/31/CompiledOpenCVWithMinGW64/文章来源地址https://www.toymoban.com/news/detail-449971.html

到了这里,关于调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包