记录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的源码再使用
编译过程参考:
https://blog.huihut.com/2018/07/31/CompiledOpenCVWithMinGW64/
https://github.com/huihut/OpenCV-MinGW-Build
第二个链接提供了已经有编译好opencv库,使用这个编译好的库的前提是自己的环境和作者的环境一样。所以还是自己编译吧。否则到最后会出现下图这样的问题:
这个错误是我下载上面链接提供的opencv库,cmake 、make 都没问题,最后执行可执行文件时,出现的错误。
其实就是版本的问题,后来我自己编译出来的动态库就是libopencv_core460.dll。就没有这样的问题。
最后还要添加环境变量
将bin目录加到系统的环境变量PATH里,方便程序在运行时能够找到对应的动态库。
将bin(G:\opencv\mingw64_build\bin)目录下的所有.dll文件复制到C:\Windows\System32目录下, 否则会出现无法定位程序输入点…于动态链接库…上。如下图:
最后程序正常运行。
在这之前还将/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://www.toymoban.com/news/detail-449971.html
https://blog.huihut.com/2018/07/31/CompiledOpenCVWithMinGW64/文章来源地址https://www.toymoban.com/news/detail-449971.html
到了这里,关于调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!