【问题标题】:Undefined symbols for architecture x86_64, linker issues on Yosemite with OpenCV架构 x86_64 的未定义符号,优胜美地与 OpenCV 的链接器问题
【发布时间】:2015-08-31 12:42:24
【问题描述】:

我在尝试构建一些利用某些 opencv 库的代码时遇到链接器错误。 错误本身是:

架构 x86_64 的未定义符号:

"cv::Exception::Exception(int, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11:: basic_string, std::allocator > const&, int)"

ld:未找到架构 x86_64 的符号

此错误的常见原因是什么? 我的搜索发现,很多人在使用错误的库或在 i386 而不是 x86_64 中编译 opencv 时遇到问题。我相当肯定我没有这些问题。我通过带有标志--c++11(使用c++11构建)的自制软件安装了opencv,我得到了

/usr/local/Cellar/opencv/2.4.11_1/lib/libopencv_core.dylib:Mach-O 64位动态链接共享库x86_64

我跑的时候:

文件/usr/local/Cellar/opencv/2.4.11_1/lib/libopencv_core.dylib

任何帮助将不胜感激!如果还有什么我可以提供的帮助,请告诉我。

【问题讨论】:

    标签: c++ macos opencv linker osx-yosemite


    【解决方案1】:

    通常的原因是您尝试链接的动态库未安装或未符号链接到链接器搜索的目录中。

    这可能是由两个问题引起的。

    首先,当您尝试构建可执行文件时,您可能会向链接器提供不完整的命令。或者其次,您可能从自制软件中获得了错误的安装。

    幸运的是,这很容易由 pkg-config 管理,如果你输入,你可以看到它是必需的 brew info opencv 这产生 ... ==> Dependencies Build: cmake ✘, pkg-config ✔ Required: jpeg ✔, libpng ✘, libtiff ✔ ... 通过注意到 Homebrew 的 opencv 瓶在其依赖项中使用 pkg-config,您可以使用此工具为您获取链接器标志。

    命令行构建的示例可能是

    clang++ -std=c++11 -o opencv_app opencv_test.cpp $(pkg-config --cflags --libs opencv)

    阅读页面 man pkg-config 并在 DESCRIPTION 部分中查找 .pc 文件的存储位置。然后浏览到这些文件并测试pkg-config 命令以获取包含和链接器路径。完成此工作后,请返回并尝试使用 $(pkg-config ...) 扩展插入的这些标志进行构建。

    编辑写完这篇文章后,我继续通过 Homebrew 安装了 opencv,以检查 pkg-config 建议是否有效。默认的$PKG_CONFIG_PATH 不包括 Homebrew 存储 *.pc 文件的目录,因此您需要再做一件事。类型 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig。那么你应该是 能够像我一样毫无问题地运行pkg-config --cflags --libs opencv

    【讨论】:

    • 不幸的是,libc++ 和 libstdc++ 出现了一些问题,我最终只使用了 Ubuntu VM。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多