Qt-Creator 中 OpenCV 程序中的链接器错误

Posted

技术标签:

【中文标题】Qt-Creator 中 OpenCV 程序中的链接器错误【英文标题】:Linker error in OpenCV Program in Qt-Creator 【发布时间】:2015-11-19 03:55:14 【问题描述】:

我在安装 OpenCV-3 的 Qt-Creator、qt-5.4 中收到以下错误:-

:-1: 错误:LNK1104: 无法打开文件'opencv_ts300.lib'

在我的项目的 .pro 文件中,我添加了 -

INCLUDEPATH += "E:\opencv\build\include"

LIBS += -L"E:\opencv\build\x86\vc11\lib"
LIBS += -lopencv_ts300d \ -lopencv_world300d \ -lopencv_ts300 \   -lopencv_world300d

以下是我的 main.cpp 程序:-

#include "mainwindow.h"
#include <QApplication>
#include<opencv2/opencv.hpp>

using namespace cv; // else would have to specify cv::cvtColor() etc.


int main(int argc, char *argv[])


QApplication a(argc, argv);
MainWindow w;
w.show();
char * imageName ="2-dp.JPG" ; // read the name of image to be loaded called   3-dp.JPG

Mat image;                  // declare Mat type object to load image-matrix

image = imread(imageName,1); // image object now contains image-matrix of the image loaded

if(!image.data)  // if image-data was invalid/non-existent/could not be read

    printf("No image data to load \n"); // then print messg
    return -1;                          // and exit program with exit code -1


Mat gray_image;            // Mat object declared for the image after gray-scale conversion

cvtColor(image, gray_image, CV_BGR2GRAY); // converts from BGR/RGB color space to gray scale

/*imwrite ("Gray_Image.jpg",gray_image);*/ //writes image-data (converted to gray scale iamge) into disk in JPEG format at file path given

namedWindow(imageName,CV_WINDOW_AUTOSIZE); // creates a named window for original image s.t window auto-scales its size as per image
namedWindow("Gray Image",CV_WINDOW_AUTOSIZE);

imshow(imageName,image);    // displays the image on the namedWindow by giving name of namedWindow
imshow("Gray Image",gray_image);

waitKey(0); //waits forever till user presses key


return a.exec();

请帮忙!

【问题讨论】:

【参考方案1】:

联动

反斜杠符号\ 不应在一行中的库名称之间使用。它没有给出问题中提到的错误消息,但是链接失败并显示相同的错误代码。

反斜杠符号可用于分隔长行:

LIBS += -lopencv_ts300d \
        -lopencv_world300d

否则库应该在没有\的一行中列出:

LIBS += -lopencv_ts300 -lopencv_world300

运行时

在运行时可能会发现一些问题。

有两种库类型:调试(以后缀d 标记)和发布。它们不应该混合在一个版本中。使用错误的库类型可能会导致运行时崩溃,例如OpenCV in Qt crashes on deallocation of vector of lines when using HoughLinesP

可以编写 qmake .pro 文件,根据发布或调试模式仅使用适当的库:

INCLUDEPATH += "E:\opencv\build\include"

LIBS += -L"E:\opencv\build\x86\vc11\lib"

CONFIG(release, debug|release) 
    # release libraries
    LIBS += -lopencv_ts300 -lopencv_world300


CONFIG(debug, debug|release) 
    # debug libraries
    LIBS += -lopencv_ts300d \
            -lopencv_world300d

注意E:\opencv\build\x86\vc11\bin 中也有二进制动态加载的库。如果在运行时无法找到这些库,则应用程序应该崩溃。该路径可以添加到系统PATH 环境变量中,或者可以将所需的库复制到应用程序文件夹或系统PATH 中列出的其他位置。


确保您正在使用编译器、链接器和 Qt 构建 vc11。对于 MSVC2013,应使用文件夹 vc12 (E:\opencv\build\x86\vc12\lib) 中的库。

【讨论】:

以上是关于Qt-Creator 中 OpenCV 程序中的链接器错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 qt-creator 将库项目链接到 qt 控制台/小部件项目

如果开发时需要,如何在 qt-creator 中调整设计器空间的大小?

Mac 上的 qmake 缺少 qt-creator

在 Windows 8 上使用 Qt-creator 构建(编译)一个基本的独立 .exe 应用程序

在 QT-creator 中找不到 phoneGap 文件

QT-creator 中架构 x86_64 的未定义符号