【问题标题】:Undefined symbols for architecture x86_64 error when linking OpenCV in Xcode在 Xcode 中链接 OpenCV 时架构 x86_64 错误的未定义符号
【发布时间】:2013-04-11 07:20:19
【问题描述】:

我在 Xcode 中链接 OpenCV 时遇到问题。 我使用 brew 安装了 OpenCV:

brew tap homebrew/science
sudo brew install opencv

我开始了一个新的 Xcode 命令行项目,将 /usr/local/lib/usr/local/include 添加到库和标题搜索路径中。 我还将pkg-config --libs opencv 的输出添加到other linker options

但是当我尝试编译这个小示例程序时:

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

int main(int argc, char *argv[])
{
    cv::Mat test;
    cv::namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
    cv::waitKey(0);                                          // Wait for a keystroke in the window
    return 0;
} 

我收到以下链接器错误:

Undefined symbols for architecture x86_64:
  "cv::namedWindow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64

但我可以在命令行上使用

编译程序
g++ `pkg-config --cflags --libs opencv` prog.cpp

所以我认为问题在于 Xcode 的设置方式。但我无法确定 Xcode 的编译方式和我的命令行参数之间到底有什么不同。

有谁知道这个错误的原因或知道我可以尝试调查这个问题吗?

【问题讨论】:

    标签: xcode opencv


    【解决方案1】:

    在 Xcode 中在您的项目中创建一个新组,右键单击它,选择 Add Files to Project,导航到 /usr/local/lib 文件夹并添加以下基本库:

    libopencv_core.dylib、libopencv_ml.dylib、libopencv_video.dylib

    在以前版本的 OpenCV 中,库名称可能是:

    libcxcore.dylib、libcvaux.dylib、libcv.dylib、libhighgui.dylib、 libml.dylib

    (根据您在 Mac 上安装 OpenCV 的方法,这些库可能位于其他路径中。)

    编辑:

    如果您按照 OP 的说明在链接阶段包含动态库,则不需要上述行。

    选择您的项目,进入Build Settings选项卡,按c++标准库过滤,并将此参数设置为libstdc++(GNU C++标准库)。

    【讨论】:

    • 这会产生同样的错误。我的库名称略有不同。 libopencv_core.dylib 但我认为这不是问题。另外,我添加它们的方式是否会有所不同?使用other linker option,我尝试尽可能地重新创建我的命令行版本。有没有办法检查 xcode 是否真的在使用这些库进行链接?
    • @sietschie 查看我编辑的答案,我添加了另一个可能导致此问题的 Xcode 设置。
    • 使用libstdc++ 解决了我的问题。
    • 不能对此给予足够的支持 - 只需添加对我有用的库。谢谢! :)
    • 即使您不使用 highgui 包括“libopencv_highgui”,这也解决了我的问题。
    【解决方案2】:

    我已将 Build Settings -> c++ 标准库设置为 Compiler Default。错误消失了。

    【讨论】:

    • libstdc++ 对我不起作用,但编译器默认值起作用
    【解决方案3】:

    我必须添加以下库(构建阶段 -> 将二进制文件与库链接),以便构建 OpenCV:

    • 加速
    • 资产库
    • AVFoundation
    • CoreGraphics
    • CoreImage
    • CoreMedia
    • CoreVideo
    • 石英核心
    • UIKit
    • 基础

    参考:http://docs.opencv.org/doc/tutorials/ios/video_processing/video_processing.html#opencviosvideoprocessing

    【讨论】:

      【解决方案4】:

      对于我来说,我在 iOS 的 xcode 中使用 opencv,我通过 pod install 而不是离线 opencv 框架使用 opencv 来解决错误。

      您可以通过在下面添加opencv pod文本来尝试:

      pod 'OpenCV', '2.4.9'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-19
        • 1970-01-01
        • 1970-01-01
        • 2015-12-12
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 2015-12-16
        相关资源
        最近更新 更多