HarmonyOS鸿蒙Next原生Openharmony5.0代码编译报错
HarmonyOS鸿蒙Next原生Openharmony5.0代码编译报错 原生openharmony5.0代码,在build-type为debug的时候,编译链接third_party/abseil-cpp时,出现build error,报错为
ld.lld: error: undefined symbol:absl::lts_20220623::raw_logging_internal::RawLog(absl::lts_20220623::LogServerity, char const*. int, char const*, …)
referenced by call_once.h:157 (…/…/third_party/abseil-cpp/abseil-cpp/absl/base/call_once.h:157)
更多关于HarmonyOS鸿蒙Next原生Openharmony5.0代码编译报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
难道openharmony的源代码都不会编译profile和debug的版本吗,这版本发布的也太敷衍了吧。
更多关于HarmonyOS鸿蒙Next原生Openharmony5.0代码编译报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我看OH 滚动构建上面 5.0.0、5.1.0 是可以编译出来镜像的。是不是本地环境有问题?
或者你再拉一套5.1.0的,如果还是不能编译成功,可能就是本地环境的问题了

我说过了,是debug版本或者profile版本,当配置这两个build-type之后,third-party的组件还有一些系统配置和release版本是不同的。我本地编译release版本也能正常编译成功。
这种未定义符号,链接错误,就是有函数声明,但链接时找不到定义。
看不到你的配置(CMake构建为例),只能给你个大体排查方向:
-
先做简单操作的。清理和重新生成构建文件。
-
如果其他编译环境(如release)下,可以编译成功,那就对比配置不同的地方,全文搜absell找不同。
-
如果absell用的源码,IDE全文搜absell或RawLog,找到定义实现的文件,确认是否参与编译了。
-
如果用的静(动)态库,确保库在CMakeLists.txt里正确引入了。
这种问题,看不到你的环境和工程,除非和你遇到过一模一样的情况并解决过了,才能准确回答你。
还有几点排查,参考下这个:《CPP编译报错》
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
修改:
third_party/abseil-cpp/absl/base/BUILD.gn
找到相关 target:
可能类似:
ohos_static_library(“base”)
或:
source_set(“base”)
确保加入:
internal/raw_logging.cc
OpenHarmony相关的问题可以去laval社区交流哦
编译报错通常由于OpenHarmony 5.0的构建环境配置不当,如工具链版本(hb、gn、ninja)与SDK不匹配,或依赖库缺失。此外,引用已废弃的API、模块路径错误、权限配置文件未更新也会导致失败。请检查项目根目录下的build.log或编译控制台输出的具体错误行,定位到具体模块或文件。
这个链接错误是因为 call_once.h 中调用了 RawLog 函数,但链接时找不到该符号。该符号属于 Abseil 的内部日志库 absl_raw_logging_internal。在 OpenHarmony 5.0 原生 debug 构建中,可能是目标依赖未正确声明,或 Abseil 的部分源码未参与编译。
解决方法:检查引用 call_once.h 的目标(通常是 absl_base 或直接使用它的模块)的 BUILD.gn,确保显式添加 "//third_party/abseil-cpp:absl_raw_logging_internal" 依赖。


