首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义的引用cv::imread(std::string const&,int)

未定义的引用cv::imread(std::string const&,int)
EN

Stack Overflow用户
提问于 2015-07-31 11:26:18
回答 1查看 1.5K关注 0票数 1

我想在Qt中链接OpenCV。我做的所有步骤都是here,每一个步骤都是成功的。但是现在我有一些错误是在Linux中被here回答的,但是我找不到适用于Linux的答案。

下面是我的代码示例:

main.cpp

代码语言:javascript
复制
#include <opencv2/opencv.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

int main(int argc, char *argv[])
{
    cv::Mat input;
    input = cv::imread("‪C:\\Users\\IS UEFI\\Desktop\\pelak_khali.jpg");
    QApplication a(argc, argv);
    QString plate = "";
    MainWindow w(plate);
    w.show();
    std::thread thread(chenges_on_plate, &w);
    int rc = a.exec();
    thread.join(); // wait for the thread to finish
    return rc;
}

.pro文件

代码语言:javascript
复制
INCLUDEPATH += D:\QtCommercial\opencv\opencv\build\include

CONFIG(release,debug|release)
{
LIBS += D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_calib3d2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_contrib2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_core2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_features2d2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_flann2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_gpu2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_highgui2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_imgproc2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_legacy2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_ml2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_nonfree2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_objdetect2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_ocl2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_photo2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_stitching2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_superres2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_ts2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_video2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_videostab2411.lib
        }
CONFIG(debug,debug|release)
       {
LIBS += D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_calib3d2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_contrib2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_core2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_features2d2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_flann2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_gpu2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_highgui2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_imgproc2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_legacy2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_ml2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_nonfree2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_objdetect2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_ocl2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_photo2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_stitching2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_superres2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_ts2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_video2411.lib \
        D:\QtCommercial\opencv\opencv\build\x86\vc10\lib\opencv_videostab2411.lib
}

我正在链接所有的库,我使用"/“而不是"\”,但是它也不起作用。

我做了很多方法来修复它,但不幸的是他们帮不了我。

以下是我的错误:

代码语言:javascript
复制
error: undefined reference to `cv::imread(std::string const&, int)'
error: undefined reference to `cv::fastFree(void*)'
error: undefined reference to `cv::Mat::copySize(cv::Mat const&)'
error: undefined reference to `cv::Mat::deallocate()'

在你帮忙之前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2015-07-31 16:29:44

您使用的所有C++代码都必须至少使用相同的编译器进行编译。一些编译器选项也必须是相同的--比如要使用的运行时库、是否启用RTTI等等。否则,您将得到一些库/对象,这些库/对象轻微地二进制不兼容,在最不需要的时候会以各种混乱的方式中断。

因此,Qt、OpenCV和您自己的代码必须用同一个编译器编译。不同的MSVC版本不兼容。用MSVC10编译的代码可能与MSVC11链接,但这并不意味着它将正确工作。所以,千万别那么做。

实际上,使用C++项目的二进制发行版是不值得的。编译您自己的Qt,您自己的OpenCV,并使用它们。您还可以使用符号信息对它们进行调试,因此您可以立即获得这方面的信息。没有别的办法了。

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

https://stackoverflow.com/questions/31745044

复制
相关文章

相似问题

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