【发布时间】:2015-09-08 06:31:57
【问题描述】:
我一直在尝试在基于 Qt 的应用程序中使用 OpenCV。但是,由于某种原因,我遇到了链接错误。
我正在使用 Qt 5.5.0、MSVC 12.0、OpenCV 3.0、Windows 7。我的 OpenCV 已解压到 C:\opencv 文件夹中。我不是想自己编译库,只是使用包中的内容。如下代码所示,我正在链接到位于 vc12 文件夹中的库。
我已经删除了所有代码,并使其成为故障排除的基础,所以我有一个默认的启动 QtWidget 项目(带有一个空白屏幕),我在其中添加了一行:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/core.hpp>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
cv::Mat M;
}
MainWindow::~MainWindow()
{
delete ui;
}
如果我注释掉唯一的 openCV 命令 (cv::Mat M;),代码将编译并运行。有了这一行,我得到了两个未解决的符号错误:
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPEAX@Z) referenced in function "public: __cdecl cv::Mat::~Mat(void)" (??1Mat@cv@@QEAA@XZ)
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: void __cdecl cv::Mat::deallocate(void)" (?deallocate@Mat@cv@@QEAAXXZ) referenced in function "public: void __cdecl cv::Mat::release(void)" (?release@Mat@cv@@QEAAXXZ)
我尝试了各种静态链接 openCV 库的方法,但我总是遇到相同的错误(我总是清理、重新运行 QMake,然后每次尝试都重新构建项目)。这是我的 .pro 文件现在的样子(我最终添加了所有静态库,希望这会有所帮助 - 它没有):
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Test
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
win32:CONFIG(release, debug|release): LIBS += -LC:/opencv/build/x86/vc12/staticlib \
-lopencv_core300 \
-lopencv_highgui300 \
-lopencv_imgproc300 \
-lIlmImf \
-lippicvmt \
-llibjasper \
-llibjpeg \
-llibpng \
-llibtiff \
-llibwebp \
-lopencv_calib3d300 \
-lopencv_features2d300 \
-lopencv_flann300 \
-lopencv_hal300 \
-lopencv_imgcodecs300 \
-lopencv_ml300 \
-lopencv_objdetect300 \
-lopencv_photo300 \
-lopencv_shape300 \
-lopencv_stitching300 \
-lopencv_superres300 \
-lopencv_ts300 \
-lopencv_video300 \
-lopencv_videoio300 \
-lopencv_videostab300 \
-lzlib
else:win32:CONFIG(debug, debug|release): LIBS += -LC:/opencv/build/x86/vc12/staticlib \
-lopencv_core300d \
-lopencv_highgui300d \
-lopencv_imgproc300d \
-lIlmImfd \
-lippicvmt \
-llibjasperd \
-llibjpegd \
-llibpngd \
-llibtiffd \
-llibwebpd \
-lopencv_calib3d300d \
-lopencv_features2d300d \
-lopencv_flann300d \
-lopencv_hal300d \
-lopencv_imgcodecs300d \
-lopencv_ml300d \
-lopencv_objdetect300d \
-lopencv_photo300d \
-lopencv_shape300d \
-lopencv_stitching300d \
-lopencv_superres300d \
-lopencv_ts300d \
-lopencv_video300d \
-lopencv_videoio300d \
-lopencv_videostab300d \
-lzlibd
INCLUDEPATH += C:/opencv/build/include/
DEPENDPATH += C:/opencv/build/include/
我在配置方面有什么特别遗漏的地方吗?我很确定基本语法(如斜杠等)没问题,因为我能够在另一个项目中链接 Qt Creator 中的另一个库,但我很乐意在这一点上尝试任何建议。
【问题讨论】:
-
您自己构建了 OpenCV 吗?如果不是,那么您是否下载了与您使用的编译器完全匹配的 OpenCV 二进制文件?请记住,所有 MSVC 二进制文件(Qt、您的项目、库等)必须使用相同的 MSVC 主要版本进行编译。
-
感谢您的建议。我按原样使用这些库,并没有自己构建它们。但是,我正在链接到 vc12 版本。我正在编辑原始问题以反映这一点。
标签: c++ qt opencv linker-errors qmake