【问题标题】:Linking error with OpenCV on OS/X在 OS/X 上与 OpenCV 链接错误
【发布时间】:2013-11-19 10:33:42
【问题描述】:

当我尝试构建 OpenCV 应用程序时:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    if (argc < 2) {
        cout << "usage: " << argv[0] << " image.png" << endl;
        return 1;
    }
    Mat im = imread(argv[1]);
    return 0;
}

我收到一个链接器错误:

bash-3.2$ g++ `pkg-config --cflags --libs opencv` fs.cpp
Undefined symbols for architecture x86_64:
  "cv::imread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from:
      _main in fs-EK7vjB.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是我要链接的库(通过自制软件安装的 OpenCV):

bash-3.2$ pkg-config --libs opencv
/usr/local/Cellar/opencv/2.4.5/lib/libopencv_calib3d.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_contrib.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_core.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_features2d.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_flann.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_gpu.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_highgui.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_imgproc.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_legacy.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_ml.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_nonfree.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_objdetect.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_ocl.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_photo.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_stitching.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_superres.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_ts.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_video.dylib /usr/local/Cellar/opencv/2.4.5/lib/libopencv_videostab.dylib

更易读的列表:

bash-3.2$ for f in $(pkg-config --libs opencv); do echo $(basename $f); done
libopencv_calib3d.dylib
libopencv_contrib.dylib
libopencv_core.dylib
libopencv_features2d.dylib
libopencv_flann.dylib
libopencv_gpu.dylib
libopencv_highgui.dylib
libopencv_imgproc.dylib
libopencv_legacy.dylib
libopencv_ml.dylib
libopencv_nonfree.dylib
libopencv_objdetect.dylib
libopencv_ocl.dylib
libopencv_photo.dylib
libopencv_stitching.dylib
libopencv_superres.dylib
libopencv_ts.dylib
libopencv_video.dylib
libopencv_videostab.dylib

我做错了什么,我怎样才能让事情正常进行?

【问题讨论】:

    标签: macos opencv linker linker-errors


    【解决方案1】:

    您似乎没有为您的系统链接正确的库。尝试 CMake 来创建你的项目文件(详情请参考我的回答here)。

    【讨论】:

    • 感谢您的回复。这些是我仅有的库。如果它们不是正确的库,那么 CMake 有什么好处呢?我如何检查这些是否确实是正确的库?
    • 构建源代码是确保的好方法。赞一个。
    【解决方案2】:

    OpenCV 的 homebrew 安装似乎已损坏。我从源代码构建了这个库,它工作正常。

    1. http://opencv.org/ 下载并解压最新的压缩包
    2. mkdir opencv-2.4.7/build
    3. cd opencv-2.4.7/build
    4. ccmake - 设置所有相关选项,尤其是 CMAKE_INSTALL_PREFIX
    5. 制作
    6. 进行安装
    7. 导出 PKG_CONFIG_PATH=/Users/misha/lib/pkgconfig(或您安装库的任何位置)
    8. pkg-config --libs --cflags opencv - 确认 pkgconfig 选择您新安装的库
    9. 构建应用程序

    另外,您可能想删除损坏的自制软件 opencv:

    brew uninstall opencv
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-15
      • 2014-02-04
      • 2017-06-12
      • 1970-01-01
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      相关资源
      最近更新 更多