c++ - dyld:找不到符号:__ZN2cv6imreadERKNSt3 在 MAC OS 10.10 上运行简单代码时

标签 c++ macos opencv shared-libraries dyld

我正在尝试在 MAC OS 10.10 上运行以下代码:

#include <cv.h>    
#include <highgui.h>    

using namespace std;
using namespace cv;

int main() 
{
    Mat img = imread("xxx.jpg");
    imshow("image", img);
    waitKey(0);

    return 0;
}

这段代码可以编译成功。但是,当我运行它时,我总是收到错误消息:

dyld: lazy symbol binding failed: Symbol not found: 
__ZN2cv6imreadERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEi
Referenced from:    
/Users/Coldmoon/ComputerVisionApps/opencvTest/Build/Products/Debug/opencvTest
Expected in: /usr/local/lib/libopencv_highgui.2.4.dylib

我有两个不同版本的 opencv。一个是用 libstdc++ 构建的,另一个是用 libc++ 构建的。两者都是 opencv 2.4.9。我想使用 libc++ opencv 构建上面的代码。

因此,在 Xcode 6.1 中,我将 Header Search PathLibrary Search Path 设置为指向 libc++ opencv,它位于 /Users/Coldmoon/MyLibraries/opencv-2.4.9 并将 C++ Standard Library 设置为 libc++

我的问题:编译器似乎没有链接 libc++ opencv,而是链接 libstdc++ opencv,它位于 /usr/local/lib .

我完全糊涂了。有什么我想念的吗?

最佳答案

Library Search Paths告诉链接器在哪里搜索要链接的库。但是当可执行文件运行时,库可能会在不同的地方被动态加载器(dyld)搜索。这由可以通过 otool -D libFoo.dylib 查询的库的“安装名称”控制.

因此,例如,如果您链​​接到的库位于 /bar/libFoo.dylib 中, 但它的安装名称是 /baz/libFoo.dylib , 你需要输入 /barLibrary Search Paths ,但是当您运行二进制文件时,它将在 /baz 中搜索.

当可执行文件由 otool -L <executable> 运行时,您还可以找到搜索库的位置。 .

如果共享库的路径不是绝对路径,动态加载器会尝试从一些标准路径加载它。如果你设置 DYLD_PRINT_LIBRARIES环境变量,dyld会将它尝试加载的库的文件名记录到 stderr .您可以覆盖 dyld 所在的路径通过设置 DYLD_LIBRARY_PATH 搜索库变量(: - 分隔的路径列表)。

关于 dyld 的更多信息环境变量可以在 man dyld 中找到.

关于c++ - dyld:找不到符号:__ZN2cv6imreadERKNSt3 在 MAC OS 10.10 上运行简单代码时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26802086/

相关文章:

macos - 使用 NSUndoManager 和 .prepare(withInitationTarget :) in Swift 3

objective-c - 禁用 NSDocument 的 "Revert To"和 "Duplicate"菜单项

python - 当内核设置为 None 时,opencv 腐 eclipse 或膨胀如何工作

c++ - OpenCV C++中的微小星球全景图

c++ - MFC C++ 托盘应用程序问题

c - 如何将自己的头文件目录添加到 Mac 终端 gcc?

c++ - 从单线程到多线程图像处理

android - 从源代码为 Android 构建 OpenCV 和 OpenCV 额外模块

c++ - IRLBot Paper DRUM 实现 - 为什么将键、值对和辅助存储桶分开?

c++ - 从未见过的代码行