【问题标题】:How to manually include a dynamic library in an iOS APP如何在 iOS APP 中手动包含动态库
【发布时间】:2019-05-07 12:07:41
【问题描述】:

我有一个 iOS 应用程序(不是用 xcode 制作的),我需要在其中包含一个动态库。我的电脑上有这个库:

\webrtc
    \WebRTC.framework
        \Headers
            \*.h
        \Modules
            \module.modulemap
        \WebRTC
        \Info.plist

然后我像这样在我的应用中部署这些文件:

ALLiveVideoChatClient.app
    \Frameworks
        \WebRTC.framework
            \Headers
                \*.h
            \Modules
                \module.modulemap
            \WebRTC
            \Info.plist

当我这样做时

otool -L ALLiveVideoChatClient.app/ALLiveVideoChatClient

它还给我:

@rpath/WebRTC.framework/WebRTC (compatibility version 0.0.0, current version 0.0.0)

当我尝试运行我的应用程序时收到错误消息:

异常类型:EXC_CRASH (SIGABRT) 异常代码: 0x0000000000000000, 0x0000000000000000 异常说明: EXC_CORPSE_NOTIFY 终止说明:DYLD,未加载库: @rpath/WebRTC.framework/WebRTC |参考自: /var/containers/Bundle/Application/A2C3A7DA-D35E-4649-AEA0-9AB518E48971/ALLiveVideoChatClient.app/ALLiveVideoChatClient |原因:找不到图片由线程触发:0

所以我检查了@rpath 的值

otool -l ALLiveVideoChatClient.app/ALLiveVideoChatClient

它返回我

cmd LC_RPATH
cmdsize 32
path $ORIGIN (offset 12)

我不确定$ORIGIN 是什么意思,但它指向ALLiveVideoChatClient.app,所以我更新@rpath 以指向$ORIGIN/Frameworks-rpath $ORIGIN/Frameworks 添加到链接器(http://www.manpagez.com/man/1/ld/)但我仍然收到错误找不到图片

我做错了什么?手动向 iOS 应用添加(所以没有 xcode)动态库的步骤是什么?

【问题讨论】:

    标签: ios dynamic-linking dynamic-library rpath otool


    【解决方案1】:

    WebRTC.framework 是一个嵌入式框架,您需要将其嵌入到您的应用中。如果没有,您将收到上述错误。

    要嵌入,请转到构建设置。您将找到有关“嵌入框架”的部分。点击 + 图标。它将向您显示您的应用程序中包含的框架列表,选择 WebRTC 框架。更多细节在这里Apple TechNote - Embedding Frameworks In An App

    另一方面,我发现 Google 决定从 WebRTC 中删除静态库目标是荒谬的。我们已修改 build.gn(s) 以生成静态库并改为使用它。如果你需要,我可以分享。

    【讨论】:

      猜你喜欢
      • 2012-04-02
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多