首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt-Creator中OpenCV程序中的链接器错误

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

Stack Overflow用户
提问于 2015-11-19 03:55:14
回答 1查看 1K关注 0票数 0

在使用OpenCV-3安装的Qt-Creator,qt-5.4中,我得到以下错误:

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

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

代码语言:javascript
复制
INCLUDEPATH += "E:\opencv\build\include"

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

以下是我的main.cpp程序:

代码语言:javascript
复制
#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();
}

请帮帮我!

EN

回答 1

Stack Overflow用户

发布于 2015-11-22 17:26:28

链接

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

反斜杠符号可用于打断长线:

代码语言:javascript
复制
LIBS += -lopencv_ts300d \
        -lopencv_world300d

否则,库应该列在一行中,而不需要\

代码语言:javascript
复制
LIBS += -lopencv_ts300 -lopencv_world300

运行时

在运行时可以发现的问题很少。

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

可以编写只使用适当库的qmake .pro文件,具体取决于发布或调试模式:

代码语言:javascript
复制
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中列出的其他位置。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33794976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档