MinGW环境下Qt Creator调用OpenCV报undefined reference错误求助
解决Qt 6 + MinGW编译OpenCV链接错误问题
核心问题定位
你遇到的undefined reference本质是MinGW编译的Qt项目,找不到匹配编译版本的OpenCV库文件——VS2022能正常运行,说明OpenCV本身没问题,但你用的OpenCV大概率是MSVC版本,和MinGW不兼容,或者Qt项目的链接配置有误。
分步解决步骤
1. 确认OpenCV编译版本与MinGW匹配
- 检查当前使用的OpenCV是否是MinGW编译版本:MSVC编译的OpenCV库后缀是
*.lib,MinGW编译的是*.a/*.dll.a。如果你的OpenCV是官网下载的预编译包,默认只有MSVC版本,必须自己用MinGW重新编译OpenCV。 - 编译OpenCV时,要和你Qt用的MinGW版本完全一致(比如Qt用的是MinGW 11.2.0,编译OpenCV也要用同版本的MinGW)。
2. 修正Qt .pri配置文件
你的.pri配置要确保路径、库文件名正确,以下是标准配置模板,替换成你的实际路径:
# OpenCV路径配置 OPENCV_DIR = D:/opencv/build_mingw # 替换为你的MinGW编译OpenCV的build目录 INCLUDEPATH += $$OPENCV_DIR/include INCLUDEPATH += $$OPENCV_DIR/include/opencv2 # 链接库配置(根据OpenCV版本调整库名,比如4.x版本) LIBS += -L$$OPENCV_DIR/x64/mingw/lib # 注意是x64还是x86,和你的Qt编译架构一致 LIBS += -lopencv_core460 LIBS += -lopencv_imgproc460 LIBS += -lopencv_highgui460 LIBS += -lopencv_imgcodecs460 # 按需添加其他需要的库,比如opencv_videoio等
- 注意:库文件名要和
OPENCV_DIR/x64/mingw/lib下的文件完全对应,比如OpenCV 4.6.0的核心库是libopencv_core460.a,所以配置里写-lopencv_core460(去掉前缀lib和后缀.a)。 - 不要混合使用绝对路径和相对路径,确保
OPENCV_DIR是正确的绝对路径。
3. 检查Qt项目编译架构
- 确认Qt Creator的编译套件是MinGW 64位(如果你的OpenCV是64位编译的),在Qt Creator的「项目」选项卡->「构建套件(Kits)」里查看,确保编译器、架构和OpenCV一致。
4. 清理项目重新构建
- 执行Qt Creator的「构建」->「清理项目」,然后删除项目目录下的
build-*文件夹,再重新构建,避免旧的缓存文件干扰。
验证测试代码
用极简代码验证配置是否正确,比如:
#include <opencv2/opencv.hpp> #include <QDebug> int main() { cv::Mat img = cv::imread("test.jpg"); if(img.empty()) { qDebug() << "Image load failed"; } else { qDebug() << "Image loaded, size:" << img.rows << "x" << img.cols; cv::imshow("Test", img); cv::waitKey(0); } return 0; }
如果这段代码能正常编译运行,说明配置没问题,再逐步替换成你原来的代码排查。
内容的提问来源于stack exchange,提问作者望曉天
相关产品推荐
相关产品推荐

