【问题标题】:Link OpenCV library with Qt creator on ubuntu在 ubuntu 上将 OpenCV 库与 Qt 创建者链接
【发布时间】:2015-10-23 21:30:09
【问题描述】:

当我尝试在 Ubuntu 上链接 OpenCV 库时,发生了一些我无法理解的问题。

我在 Ubuntu 14.04 上使用了 OpenCV 2.4.11 和 Qt creator。

在我的项目文件中,我写了

INCLUDEPATH += /usr/local/include/opencv
INCLUDEPATH += /usr/local/include/opencv2

LIBS += -L/usr/local/lib\
     -lopencv_calib3d\
     -lopencv_contrib\
     -lopencv_core\
     -lopencv_features2d \
     -lopencv_flann\
     -lopencv_gpu\
     -lopencv_highgui\
     -lopencv_imgproc\
     -lopencv_legacy\
     -lopencv_ml\
     -lopencv_nonfree\
     -lopencv_objdetect\
     -lopencv_ocl\
     -lopencv_photo\
     -lopencv_stitching\
     -lopencv_superres\
     -lopencv_ts\
     -lopencv_video\
     -lopencv_videostab

但是在构建项目的时候出现了很多错误,比如undefined reference to 'cvCreateMat'。显然,OpenCV 没有正确链接到我的项目。

于是,我在网上搜索并尝试了一个可能的解决方案,那就是

CONFIG += link_pkgconfig
PKGCONFIG += opencv

令我惊讶的是,它可以正常工作并且不再出现链接错误。

但是,我仍然不明白为什么它不能以第一种方式工作,因为我已经在 Mac OS X 上成功地设置了我的项目。为什么它现在不能在我的 Ubuntu 上工作?


我试过pkg-config --libs opencv,结果是

-L/usr/local/lib -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -ltbb -lXext -lX11 -lICE -lSM -lGL -lGLU -lrt -lpthread -lm -ldl

【问题讨论】:

    标签: c++ qt opencv ubuntu


    【解决方案1】:

    你错过了一个图书馆:-lopencv_nonfree

    在 Linux 上的 qt 项目中包含 openCV 的最佳方法是在 pro 文件中添加如下内容:

    # add open CV
    unix {
        CONFIG += link_pkgconfig
        PKGCONFIG += opencv
    }
    

    将代码移动到另一台机器时不会出现路径问题。

    https://stackoverflow.com/a/17137998/1387438

    【讨论】:

    • 是的,效果很好。但是我还是不明白为什么第一种方法会导致链接错误。
    • @Marek R 即使加了-lopencv_nonfree,还是有189个错误,说明所有的OpenCV库都没有正确链接。
    • 在您的机器上运行 pkg-config --libs 'opencv' 并将输出与您的 *.pro 文件和其他答案进行比较。
    【解决方案2】:

    这是 pkgconfig 链接的内容:

    luca@luca-virtual-machine:~$ pkg-config --libs 'opencv'
    /usr/lib/x86_64-linux-gnu/libopencv_calib3d.so -lopencv_calib3d /usr/lib/x86_64-linux-gnu/libopencv_contrib.so -lopencv_contrib /usr/lib/x86_64-linux-gnu/libopencv_core.so -lopencv_core /usr/lib/x86_64-linux-gnu/libopencv_features2d.so -lopencv_features2d /usr/lib/x86_64-linux-gnu/libopencv_flann.so -lopencv_flann /usr/lib/x86_64-linux-gnu/libopencv_gpu.so -lopencv_gpu /usr/lib/x86_64-linux-gnu/libopencv_highgui.so -lopencv_highgui /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so -lopencv_imgproc /usr/lib/x86_64-linux-gnu/libopencv_legacy.so -lopencv_legacy /usr/lib/x86_64-linux-gnu/libopencv_ml.so -lopencv_ml /usr/lib/x86_64-linux-gnu/libopencv_objdetect.so -lopencv_objdetect /usr/lib/x86_64-linux-gnu/libopencv_ocl.so -lopencv_ocl /usr/lib/x86_64-linux-gnu/libopencv_photo.so -lopencv_photo /usr/lib/x86_64-linux-gnu/libopencv_stitching.so -lopencv_stitching /usr/lib/x86_64-linux-gnu/libopencv_superres.so -lopencv_superres /usr/lib/x86_64-linux-gnu/libopencv_ts.so -lopencv_ts /usr/lib/x86_64-linux-gnu/libopencv_video.so -lopencv_video /usr/lib/x86_64-linux-gnu/libopencv_videostab.so -lopencv_videostab
    

    你可以和你的比较。可能缺少某些东西。

    【讨论】:

    • 是的,我知道。我在我的问题中附上了结果,我没有发现任何问题。
    • 两种情况下检查编译行。
    【解决方案3】:

    转到您的“.pro”文件并在“SOURCES”之前添加以下行:

    INCLUDEPATH += /usr/local/include/opencv
    LIBS += -L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_highgui
    

    您必须在项目中添加您需要的所有库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 2013-07-09
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多