Qt与OpenCV链接报错:undefined reference问题求助
Qt配置OpenCV出现链接错误求助
问题详情
严格按照步骤在Qt中配置OpenCV后,出现链接错误,报错信息如下:
undefined reference to `cv::imread(cv::String const&, int)' debug/mainwindow.o: In function `MainWindow::MainWindow(QWidget*)': C:\Users\Han\Desktop\QT_projects\build-TEST_OPENCV-Desktop_Qt_5_15_2_MinGW_64_bit->Debug/../TEST_OPENCV/mainwindow.cpp:17: undefined reference to `cv::imread(cv::String const&, int)'
我的OpenCV库路径为:C:\opencv-build\install\x86\mingw\lib
尝试过Qt的「添加库」功能,但无法找到指定文件。
相关代码
.pro文件
#------------------------------------------------- # # Project created by QtCreator 2017-03-05T12:30:06 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = opencvtest TEMPLATE = app # The following define makes your compiler emit warnings if you use # any feature of Qt which as been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp\ mainwindow.cpp HEADERS += mainwindow.h FORMS += mainwindow.ui INCLUDEPATH += C:\opencv\build\include LIBS += C:\opencv-build\bin\libopencv_core343.dll LIBS += C:\opencv-build\bin\libopencv_highgui343.dll LIBS += C:\opencv-build\bin\libopencv_imgcodecs343.dll LIBS += C:\opencv-build\bin\libopencv_imgproc343.dll LIBS += C:\opencv-build\bin\libopencv_features2d343.dll LIBS += C:\opencv-build\bin\libopencv_calib3d343.dll # more correct variant, how set includepath and libs for mingw # add system variable: OPENCV_SDK_DIR=D:/opencv/opencv-build/install # read http://doc.qt.io/qt-5/qmake-variable-reference.html#libs #INCLUDEPATH += $$(OPENCV_SDK_DIR)/include #LIBS += -L$$(OPENCV_SDK_DIR)/x86/mingw/lib \ # -lopencv_core320 \ # -lopencv_highgui320 \ # -lopencv_imgcodecs320 \ # -lopencv_imgproc320 \ # -lopencv_features2d320 \ # -lopencv_calib3d320
mainwindow.cpp代码
#include "mainwindow.h" #include "ui_mainwindow.h" #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // read an image cv::Mat image = cv::imread("f://1.jpg", 1); // create image window named "My Image" cv::namedWindow("My Image"); // show the image on window cv::imshow("My Image", image); } MainWindow::~MainWindow() { delete ui; }
解决方法
修正库文件链接方式
MinGW编译环境下,Qt不能直接链接.dll文件,需要链接lib目录下的静态库(.a)或动态库导入文件(.dll.a),使用-L指定库路径、-l指定库名的格式。更新.pro文件配置
替换.pro中的INCLUDEPATH和LIBS部分为以下内容:
# OpenCV配置 INCLUDEPATH += C:\opencv-build\install\include INCLUDEPATH += C:\opencv-build\install\include\opencv2 LIBS += -LC:\opencv-build\install\x86\mingw\lib \ -lopencv_core343 \ -lopencv_highgui343 \ -lopencv_imgcodecs343 \ -lopencv_imgproc343 \ -lopencv_features2d343 \ -lopencv_calib3d343
-L后跟随你的OpenCV库文件实际路径-l后跟随库文件名,需去掉前缀lib和后缀.a/.dll.a
校验环境版本匹配
确保OpenCV是用与Qt相同版本的MinGW编译的:如果Qt使用64位MinGW,OpenCV也必须是64位版本,当前路径中的x86是32位,若Qt为64位则会导致不匹配。清理重建项目
修改.pro后,执行Qt Creator的「构建」->「清理项目」,再重新构建,确保配置生效。
内容的提问来源于stack exchange,提问作者Cheesecake
相关产品推荐
相关产品推荐

