HarmonyOS 鸿蒙Next 开发集成webrtc链接报错 ld.lld: error: relocation R_AARCH64_MOVW_UABS_G0_NC
HarmonyOS 鸿蒙Next 开发集成webrtc链接报错 ld.lld: error: relocation R_AARCH64_MOVW_UABS_G0_NC
按照文档使用unbuntu编译webrtc静态库,在ubuntu上构建文档的common_audio_unittests没有问题,然后在mac上使用webrtc+mediasoup构建动态库时编译报错
ld.lld: error: relocation R_AARCH64_MOVW_UABS_G0_NC cannot be used against local symbol; recompile with -fPIC
ld.lld: error: relocation R_AARCH64_MOVW_UABS_G1_NC cannot be used against local symbol; recompile with -fPIC
ld.lld: error: relocation R_AARCH64_MOVW_UABS_G2_NC cannot be used against local symbol; recompile with -fPIC
然后我确认了webrtc和native代码都加了-fPIC,编译还是报这个错误,有大神知道为什么吗?
这个试试:
解决方法:在//build/config/compiler/BUILD.gn中的thin_archive里添加fPIC
config("thin_archive") {
# The macOS and iOS default linker ld64 does not support reading thin
# archives.
# TODO(crbug.com/1221615): Enable on is_apple if use_lld once that no longer
# confuses lldb.
if ((is_posix && !is_nacl && !is_apple) || is_fuchsia) {
arflags = [ "-T" ]
} else if (is_win && use_lld) {
arflags = [ "/llvmlibthin" ]
}
+ if (is_ohos) {
+ cflags = [ "-fPIC" ]
+ cflags_cc = [ "-fPIC" ]
+ ldflags = [ "-fPIC" ]
+ }
}
试了,没有用,后来知道原因了,编译ffmpeg的时候有个videodsp.S链接报错,说链接超过范围,找了找需要添加一个选项add_compile_options(-mcmodel=large)就过了,然后就开始报这个错误了,最后把这个编译选项去了,改videodsp.S的汇编就可以了
厉害了
针对您提到的HarmonyOS鸿蒙Next开发集成webrtc时遇到的链接错误ld.lld: error: relocation R_AARCH64_MOVW_UABS_G0_NC
,这通常与编译器或链接器在处理特定架构(如AArch64)的指令集时发生的重定位问题有关。
可能的原因包括:
- 编译器与链接器版本不匹配:确保您的编译器和链接器版本兼容且支持HarmonyOS开发。
- 代码或库中的架构不匹配:检查webrtc库是否针对AArch64架构编译,或者您的项目设置是否正确地指定了目标架构。
- 链接器标志问题:有时链接器标志(如
-pie
、-fpie
等)可能导致此类错误,尝试调整这些标志。
解决步骤:
- 验证并更新您的编译和链接工具链到最新版本。
- 确认webrtc库与您的项目架构一致。
- 检查链接脚本和编译标志,确保它们适用于您的目标平台。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html