背景是我们有嵌入式的需求,需要编译webrtc进入板子上。先说结论,最后是这样config之后就编译通过的:
gn gen out/linux-yeshen --args=‘target_os=“linux” target_cpu=“arm64” ffmpeg_branding=“Chrome” proprietary_codecs=true is_debug=true target_sysroot=“…/…/linux/general_yeshen_arm64/aarch64-buildroot-linux-gnu/sysroot” rtc_use_pipewire=false rtc_use_x11=false’
查看编译选项
gn args out/linux-yeshen --list
主要处理点:
- target_sysroot 需要设置为嵌入式板子的sysroot。
- target_cpu 需要设置为版子的cpu类型,可选的有 arm64、arm
- 看看有哪些编译选项不支持的,逐一关闭即可。比如rtc_use_pipewire是linux上获取桌面相关的服务,可以直接关掉。
这样就完成了~
其他注意点:
- 如果要使用android的toolschain,可以这样指定
custom_toolchain="//build/toolchain/android:clang_arm64"
# custom_toolchain="//build/toolchain/linux:clang_arm64"
如果不在常见的支持列表中(arm64/arm32/amd64/x86),可以这样指定出来,然后写一些 config.gni
。
- 特殊报错处理:
In file included from …/…/modules/rtp_rtcp/source/yeshen.h:72:
…/…/third_party/llvm-build/Release+Asserts/lib/clang/15.0.0/include/emmintrin.h:14:2:
error: “This header is only meant to be used on x86 and x64 architecture”
#error “This header is only meant to be used on x86 and x64 architecture”
如果遇到这类错误,大概率是引错头文件了(引了x86的头文件),处理下相关的import即可。llvm是无辜的,不用看llvm相关的设置。
- 如果遇到这个报错:
python3 “…/…/build/toolchain/gcc_link_wrapper.py” --output=“py_quality_assessment/quality_assessment/fake_polqa” – …/…/third_party/llvm-build/Release+Asserts/bin/clang++ -fuse-ld=lld -Wl,–fatal-warnings -Wl,–build-id -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,–color-diagnostics -Wl,–no-call-graph-profile-sort --target=aarch64-linux-gnu -no-canonical-prefixes -Wl,–gdb-index -rdynamic -Wl,-z,defs -Wl,–as-needed -nostdlib++ --sysroot=…/…/build/linux/general_yeshen_arm64/aarch64-buildroot-linux-gnu/sysroot -pie -Wl,–disable-new-dtags -o “py_quality_assessment/quality_assessment/fake_polqa” -Wl,–start-group @“py_quality_assessment/quality_assessment/fake_polqa.rsp” -Wl,–end-group -ldl -lpthread -lrt
ld.lld: error: cannot open crtbeginS.o: No such file or directory
ld.lld: error: unable to find library -lgcc
ld.lld: error: unable to find library -lgcc
ld.lld: error: cannot open crtendS.o: No such file or directory
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
说明缺少了这三个文件:crtbeginS.o、libgcc、crtendS.o,可以连接提供sysroot的供应商补充。
也可以自己把ln -s相关文件到 ../../build/linux/general_yeshen_arm64/aarch64-buildroot-linux-gnu/sysroot/usr/lib
目录下。文章来源:https://www.toymoban.com/news/detail-677055.html
玩~文章来源地址https://www.toymoban.com/news/detail-677055.html
到了这里,关于webrtc交叉编译嵌入式的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!