如何在iOS APP中手动包含动态库
How to manually include a dynamic library in an iOS APP
我有一个 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
是return我:
@rpath/WebRTC.framework/WebRTC (compatibility version 0.0.0, current version 0.0.0)
当我尝试 运行 我的应用程序时,我收到错误消息:
Exception Type: EXC_CRASH (SIGABRT) Exception Codes:
0x0000000000000000, 0x0000000000000000 Exception Note:
EXC_CORPSE_NOTIFY Termination Description: DYLD, Library not loaded:
@rpath/WebRTC.framework/WebRTC | Referenced from:
/var/containers/Bundle/Application/A2C3A7DA-D35E-4649-AEA0-9AB518E48971/ALLiveVideoChatClient.app/ALLiveVideoChatClient
| Reason: image not found Triggered by Thread: 0
所以我检查@rpath 的值
otool -l ALLiveVideoChatClient.app/ALLiveVideoChatClient
它return是我
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/) 但我仍然收到错误 找不到图像
我做错了什么?将动态库手动添加(因此无需 xcode)到 iOS 应用程序的步骤是什么?
WebRTC.framework 是一个嵌入式框架,您需要将其嵌入到您的应用程序中。否则,您将收到上述错误。
要嵌入,请转到构建设置。您会在 "Embed Frameworks" 上找到一个部分。单击 + 图标。它将显示您的应用程序中包含的框架列表,select WebRTC 框架。此处有更多详细信息 Apple TechNote - Embedding Frameworks In An App
附带一提,我发现 Google 从 WebRTC 中删除静态库目标的决定很荒谬。我们修改了 build.gn(s) 来生成静态库并使用它来代替。如果你需要,我可以分享给你。
我有一个 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
是return我:
@rpath/WebRTC.framework/WebRTC (compatibility version 0.0.0, current version 0.0.0)
当我尝试 运行 我的应用程序时,我收到错误消息:
Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Termination Description: DYLD, Library not loaded: @rpath/WebRTC.framework/WebRTC | Referenced from: /var/containers/Bundle/Application/A2C3A7DA-D35E-4649-AEA0-9AB518E48971/ALLiveVideoChatClient.app/ALLiveVideoChatClient | Reason: image not found Triggered by Thread: 0
所以我检查@rpath 的值
otool -l ALLiveVideoChatClient.app/ALLiveVideoChatClient
它return是我
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/) 但我仍然收到错误 找不到图像
我做错了什么?将动态库手动添加(因此无需 xcode)到 iOS 应用程序的步骤是什么?
WebRTC.framework 是一个嵌入式框架,您需要将其嵌入到您的应用程序中。否则,您将收到上述错误。
要嵌入,请转到构建设置。您会在 "Embed Frameworks" 上找到一个部分。单击 + 图标。它将显示您的应用程序中包含的框架列表,select WebRTC 框架。此处有更多详细信息 Apple TechNote - Embedding Frameworks In An App
附带一提,我发现 Google 从 WebRTC 中删除静态库目标的决定很荒谬。我们修改了 build.gn(s) 来生成静态库并使用它来代替。如果你需要,我可以分享给你。