gpt4 book ai didi

c++ - 体系结构 x86_64 的 undefined symbol ,优胜美地与 OpenCV 上的链接器问题

转载 作者:行者123 更新时间:2023-11-28 06:13:09 26 4
gpt4 key购买 nike

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

Undefined symbols for architecture 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: symbol(s) not found for architecture x86_64

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

/usr/local/Cellar/opencv/2.4.11_1/lib/libopencv_core.dylib: Mach-O 64-bit dynamically linked shared library x86_64

当我跑的时候:

file /usr/local/Cellar/opencv/2.4.11_1/lib/libopencv_core.dylib

任何帮助将不胜感激!如果我可以提供任何其他帮助,请告诉我。

最佳答案

这通常是因为您尝试链接的动态库未安装或未符号链接(symbolic link)到链接器搜索的目录中。

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

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

幸运的是,这很容易通过 pkg-config 管理,如果您键入,您可以看到它是必需的
酿造信息opencv
这产生
...
==>依赖项
构建:cmake ✘、pkg-config ✔
必需:jpeg ✔、libpng ✘、libtiff ✔
...
通过注意到来自 Homebrew 的 opencv bottle 在其依赖项中使用 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 文件的目录,因此您还需要做一件事。类型导出 PKG_CONFIG_PATH=/usr/local/lib/pkgconfig。那你应该是能够像我一样毫无问题地运行 pkg-config --cflags --libs opencv

关于c++ - 体系结构 x86_64 的 undefined symbol ,优胜美地与 OpenCV 上的链接器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30855007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com