HarmonyOS 鸿蒙Next 开发集成webrtc链接报错 ld.lld: error: relocation R_AARCH64_MOVW_UABS_G0_NC

发布于 1周前 作者 gougou168 来自 鸿蒙OS

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,编译还是报这个错误,有大神知道为什么吗?

4 回复

https://gitee.com/zhong-luping/thirdparty_knowledge/blob/master/docs/webrtc%E9%80%82%E9%85%8D%E9%97%AE%E9%A2%98%E7%82%B9%E6%80%BB%E7%BB%93.md

这个试试:

解决方法:在//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)的指令集时发生的重定位问题有关。

可能的原因包括:

  1. 编译器与链接器版本不匹配:确保您的编译器和链接器版本兼容且支持HarmonyOS开发。
  2. 代码或库中的架构不匹配:检查webrtc库是否针对AArch64架构编译,或者您的项目设置是否正确地指定了目标架构。
  3. 链接器标志问题:有时链接器标志(如-pie-fpie等)可能导致此类错误,尝试调整这些标志。

解决步骤:

  • 验证并更新您的编译和链接工具链到最新版本。
  • 确认webrtc库与您的项目架构一致。
  • 检查链接脚本和编译标志,确保它们适用于您的目标平台。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部