webrtc交叉编译嵌入式的方法

背景是我们有嵌入式的需求,需要编译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

主要处理点:

  1. target_sysroot 需要设置为嵌入式板子的sysroot。
  2. target_cpu 需要设置为版子的cpu类型,可选的有 arm64、arm
  3. 看看有哪些编译选项不支持的,逐一关闭即可。比如rtc_use_pipewire是linux上获取桌面相关的服务,可以直接关掉。

这样就完成了~


其他注意点:

  1. 如果要使用android的toolschain,可以这样指定
custom_toolchain="//build/toolchain/android:clang_arm64"
# custom_toolchain="//build/toolchain/linux:clang_arm64"

如果不在常见的支持列表中(arm64/arm32/amd64/x86),可以这样指定出来,然后写一些 config.gni

  1. 特殊报错处理:

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相关的设置。

  1. 如果遇到这个报错:

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 目录下。

玩~

你可能感兴趣的:(webrtc)