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



我想在Qt中链接OpenCV,我完全完成了这里的所有步骤,并且每个步骤都成功了。但是现在我有一些错误可以在这里回答Linux,但我找不到Windows的答案。

下面是我的代码示例:

main.cpp

#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;
}

。箴文件

INCLUDEPATH += D:QtCommercialopencvopencvbuildinclude
CONFIG(release,debug|release)
{
LIBS += D:QtCommercialopencvopencvbuildx86vc10libopencv_calib3d2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_contrib2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_core2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_features2d2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_flann2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_gpu2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_highgui2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_imgproc2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_legacy2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_ml2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_nonfree2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_objdetect2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_ocl2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_photo2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_stitching2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_superres2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_ts2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_video2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_videostab2411.lib
        }
CONFIG(debug,debug|release)
       {
LIBS += D:QtCommercialopencvopencvbuildx86vc10libopencv_calib3d2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_contrib2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_core2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_features2d2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_flann2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_gpu2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_highgui2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_imgproc2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_legacy2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_ml2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_nonfree2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_objdetect2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_ocl2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_photo2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_stitching2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_superres2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_ts2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_video2411.lib 
        D:QtCommercialopencvopencvbuildx86vc10libopencv_videostab2411.lib
}

我链接了所有的库,我用"/"代替"",但它也不起作用。

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

以下是我的错误:

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()'

谢谢你的帮助。

您使用的所有c++代码必须使用至少相同的编译器进行编译。一些编译器选项也必须是相同的——比如要使用的运行时库,是否启用RTTI,等等。否则,你最终会得到稍微不兼容二进制文件的库/对象,并在你最意想不到的时候以各种令人困惑的方式崩溃。

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

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

最新更新