You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

解决方法

  1. 修正库文件链接方式
    MinGW编译环境下,Qt不能直接链接.dll文件,需要链接lib目录下的静态库(.a)或动态库导入文件(.dll.a),使用-L指定库路径、-l指定库名的格式。

  2. 更新.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
  1. 校验环境版本匹配
    确保OpenCV是用与Qt相同版本的MinGW编译的:如果Qt使用64位MinGW,OpenCV也必须是64位版本,当前路径中的x86是32位,若Qt为64位则会导致不匹配。

  2. 清理重建项目
    修改.pro后,执行Qt Creator的「构建」->「清理项目」,再重新构建,确保配置生效。

内容的提问来源于stack exchange,提问作者Cheesecake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 05:54:17