为 iOS 构建 webrtc 库时出错

Posted

技术标签:

【中文标题】为 iOS 构建 webrtc 库时出错【英文标题】:Error building webrtc library for iOS 【发布时间】:2016-01-10 04:34:43 【问题描述】:

我一直在尝试按照 Google 在http://www.webrtc.org/native-code/ios(和相关链接)的指示为 iOS 构建 webrtc。虽然我记得过去我通过类似的步骤能够构建它,但现在情况已不再如此。

这是我做的步骤:

    下载先决条件:

    $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

    $ export PATH=`pwd`/depot_tools:"$PATH"

    下载仓库:

    $ export GYP_DEFINES="OS=ios"

    $ fetch webrtc_ios

    准备构建:

    $ cd webrtc/src

    $ export GYP_DEFINES="build_with_libjingle=1 build_with_chromium=0 libjingle_objc=1"

    $ export GYP_DEFINES="$GYP_DEFINES OS=ios target_arch=armv7"

    $ export GYP_GENERATOR_FLAGS="output_dir=out_ios"

    $ export GYP_CROSSCOMPILE=1

    $ gclient 运行钩子

    构建:

    $ ninja -C out_ios/Debug-iphoneos AppRTCDemo

一切正常,直到最后一个命令失败并显示 /bin/sh:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc:没有这样的文件或目录:

ninja: Entering directory `out_ios/Debug-iphoneos'
[3/1664] CC obj/chromium/src/third_party/boringssl/src/crypto/bio/boringssl.bio_mem.o
FAILED: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc -MMD -MF obj/chromium/src/third_party/boringssl/src/crypto/bio/boringssl.bio_mem.o.d -DV8_DEPRECATION_WARNINGS -DCLD_VERSION=2 -DDISABLE_NACL -DCHROMIUM_BUILD -DCR_CLANG_REVISION=247874-1 -DUSE_LIBJPEG_TURBO=1 -DENABLE_CONFIGURATION_POLICY -DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE -DDONT_EMBED_BUILD_METADATA -DFIELDTRIAL_TESTING_ENABLED -DDISABLE_FTP_SUPPORT=1 -DV8_USE_EXTERNAL_STARTUP_DATA -DBORINGSSL_IMPLEMENTATION -DBORINGSSL_NO_STATIC_INITIALIZER -DOPENSSL_NO_ASM -DUSE_LIBPCI=1 -DUSE_OPENSSL=1 -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DWTF_USE_DYNAMIC_ANNOTATIONS=1 -Igen -I../../chromium/src/third_party/boringssl/src/include -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk -O0 -gdwarf-2 -fvisibility=hidden -Wnewline-eof -miphoneos-version-min=7.0 -arch arm64 -Wendif-labels -Wno-unused-parameter -Wno-missing-field-initializers -Wno-selector-type-mismatch -Wheader-hygiene -Wno-char-subscripts -Wno-unneeded-internal-declaration -Wno-covered-switch-default -Wstring-conversion -Wno-c++11-narrowing -Wno-deprecated-register -Wno-inconsistent-missing-override -Wno-shift-negative-value -Wno-bitfield-width -Wno-unused-function -Wno-unused-variable -m32 -arch i386 -pipe -no-cpp-precomp -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.0.sdk -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.0.sdk/usr/include/ -m32 -arch i386 -pipe -no-cpp-precomp -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.0.sdk -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.0.sdk/usr/include/ -std=c99 -Xclang -load -Xclang /Volumes/store/code/webrtc/src/third_party/llvm-build/Release+Asserts/lib/libFindBadConstructs.dylib -Xclang -add-plugin -Xclang find-bad-constructs -fcolor-diagnostics -fstack-protector-all -Wno-undefined-bool-conversion -Wno-tautological-undefined-compare  -c ../../chromium/src/third_party/boringssl/src/crypto/bio/bio_mem.c -o obj/chromium/src/third_party/boringssl/src/crypto/bio/boringssl.bio_mem.o
/bin/sh: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc: No such file or directory

出于某种原因,忍者认为我们正在为模拟器构建,而且即使我们这样做也不是获得 gcc 的正确途径。请注意,我的系统安装了 XCode 7。

有什么想法可能是错误的或者我可以如何解决这个问题?

最好的问候, 安东尼

【问题讨论】:

你能在你的 src 目录中试试这个脚本吗? webrtc/build/ios/build_ios_libs.sh。我还看到步骤中缺少“gclient sync”。请检查您是否也在这样做。 感谢您的评论。请注意,自从我发布这个问题以来已经有很长时间了。现在我正在使用谷歌的官方指南构建没有问题:webrtc.org/native-code/ios 【参考方案1】:

一年前,我还想使用 Google 的说明构建库,但我无法做到。发生了许多错误,我最终在谷歌上搜索了一些构建脚本。最后我找到了this script。执行以下步骤,您将成功构建它:

安装命令行工具,但将此命令粘贴到终端:xcode-select --install 克隆脚本:git clone https://github.com/lunastorm/webrtc-ios.git 在终端中输入 git 存储库并使用以下命令运行脚本:make -j4 其中j4 标记 CPU 内核数(如果我错了,请纠正我)。这可能需要一段时间,所以请为自己准备一杯咖啡 第一次构建会失败,不过不用担心,删除脚本下载的文件夹即可。我会在编辑中写下哪些 找到对构建 iOS 应用程序有效的代码签名身份。在终端中输入security find-identity。在Valid identities only下选择一个 打开全局配置文件 src/build/common.gypi 并搜索文本“CODE_SIGN_IDENTITY”。将‘CODE_SIGN_IDENTITY[sdk=iphoneos*]‘: ‘iPhone Developer’ 替换为您的开发者信息,即‘CODE_SIGN_IDENTITY[sdk=iphoneos*]‘: ‘iPhone Developer: Josip Bernat (2V3DKW6SDC)’ 使用make -j4 再次运行脚本,希望它会为您构建 WebRTC.framework

【讨论】:

非常感谢您的回复 Josib B。今天早上,我也设法使用与您建议的类似解决方案(github.com/pristineio/webrtc-build-scripts)进行构建。所以我迫在眉睫的问题解决了,但我仍然想知道官方设施有什么问题。我通常会尽量避免使用包装器构建脚本,因为它们往往会出现问题并且通常落后于 webrtc 官方构建工具。

以上是关于为 iOS 构建 webrtc 库时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何从iOS中的静态库构建胖库时从libWebRTC.a静态库中删除x86_64 architechture?

使用 WebRtc 和本地点对点连接构建视频流应用程序?

webrtc分辨率和比特率--问题集锦

webrtc分辨率和比特率--问题集锦

为 webRTC 加载本机库时应用程序崩溃

为 python 安装 Dlib 库时出错