【问题标题】:OpenCV2.3 and QT compile problemOpenCV2.3和QT编译问题
【发布时间】:2025-12-21 13:35:11
【问题描述】:

参考了下面的问题,轻而易举的设置了QT4.7.0,QtCreator 2.0.0 for openCV2.3

OpenCV2.3 and QTCreator 现在,对于我尝试使用的所有 OpenCV 函数,我不断收到以下错误和更多错误,尽管 Qt 自己的智能感知会在我键入时向我显示函数。

对 cv::imread("img.jpg") 的未定义引用 对 cv::namedWindow("window") 的未定义引用

我在这里做错了什么?

在 Intel core 2 Duo 机器上使用 Win7 X86。

.Pro 文件包含以下内容

#-------------------------------------------------
#
# Project created by QtCreator 2011-08-28T00:44:27
#
#-------------------------------------------------

QT       += core

QT       -= gui

TARGET = myQtConsoleProject
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp


INCLUDEPATH += H:/OpenCV2.3/build/include
INCLUDEPATH += H:/OpenCV2.3/build/include/opencv


LIBS += H:/OpenCV2.3/build/x86/vc9/lib/opencv_calib3d230.lib
LIBS += H:/OpenCV2.3/build/x86/vc9/lib/opencv_contrib230.lib
LIBS += H:/OpenCV2.3/build/x86/vc9/lib/opencv_core230.lib
LIBS += H:/OpenCV2.3/build/x86/vc9/lib/opencv_features2d230.lib
LIBS += H:/OpenCV2.3/build/x86/vc9/lib/opencv_flann230.lib
LIBS += H:/OpenCV2.3/build/x86/vc9/lib/opencv_highgui230.lib
LIBS += H:/OpenCV2.3/build/x86/vc9/lib/opencv_imgproc230.lib
LIBS += H:/OpenCV2.3/build/x86/vc9/lib/opencv_objdetect230.lib
LIBS += H:/OpenCV2.3/build/x86/vc9/lib/opencv_video230.lib

我得到的错误如下

debug/main.o: In function `main': 
G:\QT Projects\myQtConsoleProject-build-desktop/../myQtConsoleProject/main.cpp:6: undefined reference to `cv::imread(std::string const&, int)' 
G:\QT Projects\myQtConsoleProject-build-desktop/../myQtConsoleProject/main.cpp:7: undefined reference to `cv::namedWindow(std::string const&, int)' 
G:\QT Projects\myQtConsoleProject-build-desktop/../myQtConsoleProject/main.cpp:8: undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' 
G:\QT Projects\myQtConsoleProject-build-desktop/../myQtConsoleProject/main.cpp:8: undefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)' 
G:\QT Projects\myQtConsoleProject-build-desktop/../myQtConsoleProject/main.cpp:9: undefined reference to `cv::waitKey(int)' 
debug/main.o: In function `~Mat': 
h:/OpenCV2.3/build/include/opencv2/core/mat.hpp:297: undefined reference to `cv::fastFree(void*)' 
debug/main.o:h:/OpenCV2.3/build/include/opencv2/core/mat.hpp:381: undefined reference to `cv::Mat::deallocate()' 
collect2: ld returned 1 exit status 
mingw32-make[1]: *** [debug\myQtConsoleProject.exe] Error 1 
mingw32-make: *** [debug] Error 2 
The process "E:/Qt/2010.04/mingw/bin/mingw32-make.exe" exited with code %2.
Error while building project myQtConsoleProject (target: Desktop)
When executing build step 'Make'

更新: 正如Alexdim 所指出的,如果Qt 仍然无法识别这些功能,我将需要重建OpenCV,事实证明这是真的。作为这个问题的答案。在WIN7 x86下重建OpenCV。我使用 minGW 来纠正问题。可能这也需要为 VC++ 完成。无论如何……很幸运现在能够使用 OpenCV 和 Qt!

【问题讨论】:

  • 这可能会有所帮助 - 尝试在 .Pro 文件中重复 LIBS += ... 行块 3 次。
  • @Andrey,我没明白......
  • 我会解释它是否能解决问题。但我怀疑这不是一个真实的案例。
  • @Andrey。如果你的意思是添加所有的 lib 文件,我做了大部分。让我看看是否添加所有作品。
  • @Andrey,还是不行!

标签: qt opencv


【解决方案1】:

.lib 用于 Visual C++。它们可以与 MinGW 工具链正确链接,但只有 OpenCV C API 可以访问,新的 C++ API(“cv”命名空间、类...)不能访问。

由于您的 Qt 版本是使用 MinGW 编译的,因此您应该在 build/x86/mingw 目录中包含 .a 文件,而不是 .lib 文件。
如果仍然无法正常工作,您可能必须使用 QtSDK 附带的编译器完全重建 OpenCV。

【讨论】:

  • +1 我没有注意到使用了 mingw。但如果安装了完整的 Qt SDK,那么您可以在 Qt Creator 设置中选择 MSVC2008 配置文件,而不是重新构建 OpenCV。
  • @alexisdm,你可能是对的。所以我想我会尝试一些编译器设置或尝试一些新的构建。我确实尝试将 LIBS 用于以 .a 结尾的 mingw,但一直收到相同的错误。可能我需要一起为 mingw 重建 OpenCV。
  • @Alexisdm,你完全正确,我不得不在 minGW 下重建 OpenCV,这一切都像一个魅力。我确实不得不更改 minGW 的 LIBS 路径。然而,完成这一切的过程很漫长。