【问题标题】:Swift Framework with OpenCV Dynamic Framework, Library not loaded带有 OpenCV 动态框架的 Swift 框架,未加载库
【发布时间】:2019-08-21 07:05:40
【问题描述】:

我目前正在创建一个使用 OpenCV 的 iOS Swift 框架。为了良好的实践,我们不想将 OpenCV 编译到我们的最终框架中,因为这可能会导致框架用户发生冲突和问题。

我们发现我们正在下载/使用的 opencv2.framework 是一个静态库,因此我们研究了如何从源代码 (https://github.com/opencv/opencv/tree/3.4) 创建 OpenCV 框架的动态版本

我们用来将 OpenCV 构建为动态框架的源代码。

https://docs.opencv.org/3.4.3/d5/da3/tutorial_ios_install.html https://github.com/opencv/opencv/pull/8009

简而言之,我们运行以下 python 脚本来构建动态框架

python platforms/ios/build_framework.py ios --dynamic

我们成功地将 OpenCV 构建为动态框架,我们从 opencv/iOS/opencv2.framework 中获取了 opencv2.framework,因为这是模拟器和设备的通用框架。然后将其添加到我们的框架中。然后我们构建了我们的框架,它再次成功构建。

然后我们将我们的框架添加到嵌入式测试应用程序中,然后按下运行,我们得到以下错误:

dyld: Library not loaded: 
/Desktop/Workspace/OpenCV/ios/build/build-iphoneos/lib/Release/opencv2.framework/opencv2
  Referenced from:     
/private/var/containers/Bundle/Application/UUID/Test.app/Frameworks/SomeFramework.framework/SomeFramework
  Reason: image not found

如果我们也将opencv2.framework添加到应用程序中,它会给出以下错误,这与上面的错误类似,只是引用不同:

dyld: Library not loaded:     
/Desktop/Workspace/OpenCV/ios/build/build-iphoneos/lib/Debug/opencv2.framework/opencv2
  Referenced from: 
/var/containers/Bundle/Application/UUID/TestApp.app/TestApp
  Reason: image not found

这就是我的错误所在,为什么构建过程试图在 OpenCV 构建目录中查找框架?什么时候在 App 中添加/嵌入 opencv2.framework?

【问题讨论】:

  • 检查框架中的framework search paths 设置
  • 由于这个问题已有 2 年多的历史了,您能否分享一下您是否以及如何解决此问题?
  • 我们切换到 cocoapods 并使用了以下 pod:pod 'OpenCV', '~> 3.4.3'

标签: swift xcode opencv swift-framework


【解决方案1】:

您可能只需将框架添加到应用程序的嵌入式二进制文件中。 See this answer.

旁注:您确定您创建 OpenCV 动态框架的解决方案适用于您的最终用户吗?您正在强迫最终用户将 OpenCV 依赖项添加到他们的应用程序中 - 他们必须这样做才能使您的框架正常运行。

但是,如果 OpenCV 仅作为静态库正式分发,这意味着您的客户会将其作为静态库添加到他们的项目中。我不确定您正在寻找动态链接的 OpenCV 的框架是否能够使用静态链接的 OpenCV 库。不过很高兴被证明是错误的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 2015-04-19
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2014-09-30
    相关资源
    最近更新 更多