【问题标题】:dyld not loaded Reason: image not found libopencv_core.2.4.dylibdyld 未加载原因:找不到图像 libopencv_core.2.4.dylib
【发布时间】:2012-11-13 07:41:00
【问题描述】:

我对 Objective C 和 Xcode 还是很陌生,但我刚刚完成了一个使用 openCV libopencv_core.2.4.2.dylib 的小应用程序。

当我在另一台机器上打开最终构建的应用程序时,OS X 向我抛出了这个错误:

Dyld Error Message:   Library not loaded: */libopencv_core.2.4.dylib  
Referenced from: /Users/USER/Desktop/my
app.app/Contents/MacOS/my app   
Reason: image not found

为什么我的应用在这里寻找 2.4 而不是 2.4.2?

我已经检查过的内容:

我添加了一个新的构建阶段 -> 以便将 libopencv_core.2.4.2.dylib 复制到应用程序包(通过 Xcode 中的“复制捆绑资源”) - libopencv_core.2.4.2.dylib 现在位于我的 app.app/Resources

我错过了什么?我是否设置了更多的库搜索路径或类似路径?

我也做了什么:

install_name_tool -id "@executable_path/../Frameworks/libopencv_core.2.4.2.dylib" libopencv_core.2.4.2.dylib

将 dylib 复制到 Frameworks 目录也不起作用:

Library not loaded: @executable_path/../Frameworks/libopencv_core.2.4.2.dylib

现在不知道该怎么办 - 我的应用程序的 Frameworks 目录中的 dylib ...

在二进制文件上使用otool -L 给了我:

/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 19.0.0)
    @loader_path/../Frameworks/libopencv_core.2.4.2.dylib (compatibility version 2.4.0, current version 2.4.2)
    @loader_path/../Frameworks/libopencv_highgui.2.4.2.dylib (compatibility version 2.4.0, current version 2.4.2)
    @loader_path/../Frameworks/libopencv_imgproc.2.4.2.dylib (compatibility version 2.4.0, current version 2.4.2)
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 945.11.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 744.1.0)
    /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData (compatibility version 1.0.0, current version 407.7.0)
    /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1187.33.0)

【问题讨论】:

  • 您是否检查过(使用otool -L)您对install_name_tool 的使用实际上改变了您的二进制文件中的引用?
  • 是的。我考虑使用 opencv 作为私有框架。我下载了一个 - 但它似乎无法为 x86_64 编译?
  • 澄清一下,您是否在 binary(而不是 .dylib)上运行 install_name_tool
  • 我打开 .app 包并在 .app 内的 .dylib 上运行它。我仍然不确定这是否是使用 openCV 分发应用程序的正确方法。
  • 二进制文件呢?试试otool -L...

标签: xcode opencv dylib


【解决方案1】:

我遇到了同样的问题。我将所有 .dylib 保存在系统根目录 usr/lib 中,它工作正常。在运行时 .o 文件没有得到 .dylib 文件路径然后它给出一个错误。

【讨论】:

    【解决方案2】:

    我找到了一个更好的解决方案:在 Xcode 中重新编译 openCV 并在构建设置中为您编译的每个 .dylib 设置 @executable_path/../Frameworks - 现在 .dylibs 本身总是“知道它们在哪里”。

    【讨论】:

    • 我在使用 Homebrew 构建的 opencv 时遇到了类似的问题,这似乎是一个非常麻烦的解决方案。你有没有找到更好的?
    • @escapecharacter 按照 kunalg 的建议去做。为我工作。
    【解决方案3】:

    由于其他答案不够清楚;

    假设您的 dylib 文件位于 /usr/local/opt/opencv3/lib

    sudo ln -s /usr/local/opt/opencv3/lib/*.dylib /usr/local/lib
    

    将解决这个问题。请注意,/usr/lib 在 MacOS 中受系统保护,因此您应该使用/usr/local/lib

    【讨论】:

      猜你喜欢
      • 2015-01-14
      • 1970-01-01
      • 2013-12-25
      • 2012-03-20
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 2020-01-28
      相关资源
      最近更新 更多