Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iOS应用程序中手动包含动态库_Ios_Dynamic Linking_Dynamic Library_Rpath_Otool - Fatal编程技术网

如何在iOS应用程序中手动包含动态库

如何在iOS应用程序中手动包含动态库,ios,dynamic-linking,dynamic-library,rpath,otool,Ios,Dynamic Linking,Dynamic Library,Rpath,Otool,我有一个iOS应用程序(不是用xcode制作的),我需要在其中包含一个动态库。我的计算机上有这个库: \webrtc \WebRTC.framework \Headers \*.h \Modules \module.modulemap \WebRTC \Info.plist 我在我的应用程序中部署这些文件,如下所示: ALLiveVideoChatClient.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

这是给我的回报:

@rpath/WebRTC.framework/WebRTC(兼容版本0.0.0,当前版本0.0.0)

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

异常类型:EXC_崩溃(SIGABRT)异常代码: 0x0000000000000000,0x0000000000000000异常注意: EXC_尸体_通知终止说明:DYLD,未加载库: @rpath/WebRTC.framework/WebRTC |引用自: /var/containers/Bundle/Application/A2C3A7DA-D35E-4649-AEA0-9AB518E48971/ALLiveVideoChatClient.app/ALLiveVideoChatClient |原因:未找到图像由线程0触发

所以我检查@rpath doing的值

otool -l ALLiveVideoChatClient.app/ALLiveVideoChatClient
它还我

cmd LC_RPATH
cmdsize 32
path $ORIGIN (offset 12)
我不确定
$ORIGIN
是什么意思,但它指向
ALLiveVideoChatClient.app
,所以我更新@rpath指向
$ORIGIN/Frameworks
-rpath$ORIGIN/Frameworks
添加到链接器()中,但我仍然收到错误未找到图像


我做错了什么?手动向iOS应用程序添加(因此不使用xcode)动态库的步骤是什么?

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

若要嵌入,请转到“生成设置”。您将找到一个关于“嵌入框架”的部分。点击+图标。它将显示应用程序中包含的框架列表,选择WebRTC框架。这里有更多细节

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