WebRTC 库支持 h264编译失败,麻烦老师看一眼
来源:17-2 iOS引入WebRTC库

sam_focalcrest
2021-09-18
通过下面命令生成了 ios 项目
# 支持 h264 的 Xcode 工程创建命令
gn gen out/xcode_ios_arm64 --args='target_os="ios" target_cpu="arm64" rtc_include_tests=false rtc_use_h264=true proprietary_codecs=true' --ide=xcode
xcode 正常关联了 WebRTC.framework到 AppRTCMobile 的 target
证书也配置正常了,如果没有支持h264的话,这就可以正常编译在真机运行了。
但是一旦我的打了支持h264的标签 rtc_use_h264=true 就无法在真机运行了。Build 的时候就报错了,如下:
完整的 Build 日志
Prepare build
warning: The Legacy Build System will be removed in a future release. You can configure the selected build system and this deprecation message in File > Project Settings.
Build target framework_objc_signed_bundle of project all with configuration xcode_ios_arm64
PhaseScriptExecution Action\ \"Compile\ and\ copy\ framework_objc_signed_bundle\ via\ ninja\" /Users/main/Library/Developer/Xcode/DerivedData/all-enqtejttwelkioeungfajkubknrk/Build/Intermediates.noindex/all.build/xcode_ios_arm64-iphoneos/framework_objc_signed_bundle.build/Script-3C74082C39A0F4D41672767C.sh
cd /Users/main/IdeaProjects/webrtc-study/webrtc-source/src/out/xcode_ios_arm64
/bin/sh -c /Users/main/Library/Developer/Xcode/DerivedData/all-enqtejttwelkioeungfajkubknrk/Build/Intermediates.noindex/all.build/xcode_ios_arm64-iphoneos/framework_objc_signed_bundle.build/Script-3C74082C39A0F4D41672767C.sh
Compile "framework_objc_signed_bundle" via ninja
ninja: Entering directory `.'
[1/1296] STAMP obj/third_party/libvpx/libvpx_arm64_headers.stamp
...
[1285/1296] COPY gen/sdk/WebRTC.framework/WebRTC/RTCFileLogger.h WebRTC.framework/Headers/RTCFileLogger.h
[1286/1296] STAMP obj/sdk/framework_objc_copy_public_headers.stamp
[1287/1296] STAMP obj/sdk/framework_objc_framework_headers.stamp
[1288/1296] STAMP obj/sdk/framework_objc_arch_shared_library_sources.stamp
[1289/1296] SOLINK obj/sdk/arm64/WebRTC obj/sdk/arm64/WebRTC.TOC
FAILED: obj/sdk/arm64/WebRTC obj/sdk/arm64/WebRTC.TOC
if [ ! -e "obj/sdk/arm64/WebRTC" -o ! -e "obj/sdk/arm64/WebRTC.TOC" ] || /Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool -l "obj/sdk/arm64/WebRTC" | grep -q LC_REEXPORT_DYLIB ; then TOOL_VERSION=1631759678 /Users/main/IdeaProjects/webrtc-study/webrtc-source/src/build/toolchain/apple/linker_driver.py -Wcrl,strippath,/Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip --deterministic /Users/main/IdeaProjects/webrtc-study/webrtc-source/src/third_party/llvm-build/Release+Asserts/bin/clang++ -shared -all_load -install_name @rpath/WebRTC.framework/WebRTC -Wl,-install_name,@rpath/WebRTC.framework/WebRTC -fuse-ld=lld -Wl,-fatal_warnings -Wl,--color-diagnostics -target arm64-apple-ios12.0 -no-canonical-prefixes -Werror -nostdlib++ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.5.sdk -Wl,-ObjC -Wl,-rpath,@executable_path/Frameworks -Wl,-rpath,@loader_path/Frameworks -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.5.sdk/usr/lib/swift -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos -o "obj/sdk/arm64/WebRTC" -Wl,-filelist,"obj/sdk/arm64/WebRTC.rsp" -framework AVFoundation -framework CoreGraphics -framework CoreMedia -framework CoreFoundation -framework CoreText -framework Foundation -framework CFNetwork -framework Security -framework SystemConfiguration -framework UIKit -framework AudioToolbox -framework VideoToolbox -framework CoreVideo -framework Network -framework QuartzCore -framework Metal -framework MetalKit -framework GLKit -framework OpenGLES -lm -lz -lrt && { /Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool -l "obj/sdk/arm64/WebRTC" | grep LC_ID_DYLIB -A 5; /Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm -gPp "obj/sdk/arm64/WebRTC" | cut -f1-2 -d' ' | grep -v U$$; true; } > "obj/sdk/arm64/WebRTC.TOC"; else TOOL_VERSION=1631759678 /Users/main/IdeaProjects/webrtc-study/webrtc-source/src/build/toolchain/apple/linker_driver.py -Wcrl,strippath,/Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip --deterministic /Users/main/IdeaProjects/webrtc-study/webrtc-source/src/third_party/llvm-build/Release+Asserts/bin/clang++ -shared -all_load -install_name @rpath/WebRTC.framework/WebRTC -Wl,-install_name,@rpath/WebRTC.framework/WebRTC -fuse-ld=lld -Wl,-fatal_warnings -Wl,--color-diagnostics -target arm64-apple-ios12.0 -no-canonical-prefixes -Werror -nostdlib++ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.5.sdk -Wl,-ObjC -Wl,-rpath,@executable_path/Frameworks -Wl,-rpath,@loader_path/Frameworks -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.5.sdk/usr/lib/swift -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos -o "obj/sdk/arm64/WebRTC" -Wl,-filelist,"obj/sdk/arm64/WebRTC.rsp" -framework AVFoundation -framework CoreGraphics -framework CoreMedia -framework CoreFoundation -framework CoreText -framework Foundation -framework CFNetwork -framework Security -framework SystemConfiguration -framework UIKit -framework AudioToolbox -framework VideoToolbox -framework CoreVideo -framework Network -framework QuartzCore -framework Metal -framework MetalKit -framework GLKit -framework OpenGLES -lm -lz -lrt && { /Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool -l "obj/sdk/arm64/WebRTC" | grep LC_ID_DYLIB -A 5; /Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src//Users/main/IdeaProjects/webrtc-study/webrtc-source/src/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm -gPp "obj/sdk/arm64/WebRTC" | cut -f1-2 -d' ' | grep -v U$$; true; } > "obj/sdk/arm64/WebRTC.tmp" && if ! cmp -s "obj/sdk/arm64/WebRTC.tmp" "obj/sdk/arm64/WebRTC.TOC"; then mv "obj/sdk/arm64/WebRTC.tmp" "obj/sdk/arm64/WebRTC.TOC" ; fi; fi
ld64.lld: error: library not found for -lrt
ld64.lld: error: undefined symbol: _av_buffer_create
>>> referenced by obj/modules/video_coding/libwebrtc_h264.a(h264_decoder_impl.o)
ld64.lld: error: undefined symbol: _av_image_check_size
>>> referenced by obj/modules/video_coding/libwebrtc_h264.a(h264_decoder_impl.o)
ld64.lld: error: undefined symbol: _avcodec_align_dimensions
>>> referenced by obj/modules/video_coding/libwebrtc_h264.a(h264_decoder_impl.o)
ld64.lld: error: undefined symbol: _av_frame_alloc
>>> referenced by obj/modules/video_coding/libwebrtc_h264.a(h264_decoder_impl.o)
ld64.lld: error: undefined symbol: _avcodec_open2
>>> referenced by obj/modules/video_coding/libwebrtc_h264.a(h264_decoder_impl.o)
ld64.lld: error: undefined symbol: _avcodec_find_decoder
>>> referenced by obj/modules/video_coding/libwebrtc_h264.a(h264_decoder_impl.o)
ld64.lld: error: undefined symbol: _avcodec_alloc_context3
>>> referenced by obj/modules/video_coding/libwebrtc_h264.a(h264_decoder_impl.o)
ld64.lld: error: undefined symbol: _av_frame_unref
>>> referenced by obj/modules/video_coding/libwebrtc_h264.a(h264_decoder_impl.o)
ld64.lld: error: undefined symbol: _av_buffer_get_opaque
>>> referenced by obj/modules/video_coding/libwebrtc_h264.a(h264_decoder_impl.o)
ld64.lld: error: undefined symbol: _avcodec_receive_frame
>>> referenced by obj/modules/video_coding/libwebrtc_h264.a(h264_decoder_impl.o)
ld64.lld: error: undefined symbol: _avcodec_send_packet
>>> referenced by obj/modules/video_coding/libwebrtc_h264.a(h264_decoder_impl.o)
ld64.lld: error: undefined symbol: _av_packet_alloc
>>> referenced by obj/modules/video_coding/libwebrtc_h264.a(h264_decoder_impl.o)
ld64.lld: error: undefined symbol: _av_packet_free
>>> referenced by obj/modules/video_coding/libwebrtc_h264.a(h264_decoder_impl.o)
ld64.lld: error: undefined symbol: _avcodec_free_context
>>> referenced by obj/modules/video_coding/libwebrtc_h264.a(h264_decoder_impl.o)
ld64.lld: error: undefined symbol: _av_frame_free
>>> referenced by obj/modules/video_coding/libwebrtc_h264.a(h264_decoder_impl.o)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
Traceback (most recent call last):
File "/Users/main/IdeaProjects/webrtc-study/webrtc-source/src/build/toolchain/apple/linker_driver.py", line 305, in <module>
Main(sys.argv)
File "/Users/main/IdeaProjects/webrtc-study/webrtc-source/src/build/toolchain/apple/linker_driver.py", line 98, in Main
subprocess.check_call(compiler_driver_args, env=env)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 190, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/Users/main/IdeaProjects/webrtc-study/webrtc-source/src/third_party/llvm-build/Release+Asserts/bin/clang++', '-shared', '-all_load', '-install_name', '@rpath/WebRTC.framework/WebRTC', '-Wl,-install_name,@rpath/WebRTC.framework/WebRTC', '-fuse-ld=lld', '-Wl,-fatal_warnings', '-Wl,--color-diagnostics', '-target', 'arm64-apple-ios12.0', '-no-canonical-prefixes', '-Werror', '-nostdlib++', '-isysroot', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.5.sdk', '-Wl,-ObjC', '-Wl,-rpath,@executable_path/Frameworks', '-Wl,-rpath,@loader_path/Frameworks', '-L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.5.sdk/usr/lib/swift', '-L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos', '-o', 'obj/sdk/arm64/WebRTC', '-Wl,-filelist,obj/sdk/arm64/WebRTC.rsp', '-framework', 'AVFoundation', '-framework', 'CoreGraphics', '-framework', 'CoreMedia', '-framework', 'CoreFoundation', '-framework', 'CoreText', '-framework', 'Foundation', '-framework', 'CFNetwork', '-framework', 'Security', '-framework', 'SystemConfiguration', '-framework', 'UIKit', '-framework', 'AudioToolbox', '-framework', 'VideoToolbox', '-framework', 'CoreVideo', '-framework', 'Network', '-framework', 'QuartzCore', '-framework', 'Metal', '-framework', 'MetalKit', '-framework', 'GLKit', '-framework', 'OpenGLES', '-lm', '-lz', '-lrt']' returned non-zero exit status 1
ninja: build stopped: subcommand failed.
Command /bin/sh failed with exit code 1
Build failed 2021/9/17, 7:10 PM 41.6 seconds
写回答
2回答
-
阳坤92
2023-07-26
这个是 ffmepg 没有成功编译导致的,可以手动把 ffmpeg ios 编译好,然后改下 gn
00 -
李超
2021-09-18
目前我没时间搞这个,你自己先研究研究吧
00
相似问题