交叉编译AArch64时出现Undefined symbol "_mcount"错误求助
问题分析与解决办法
你的链接错误核心原因是musl libc默认不提供gprof所需的_mcount符号——musl为了保持轻量简洁,没有内置gprof的性能分析支持,这和aarch64工具链本身无关,你添加-pg编译/链接选项的操作是正确的。
下面是几种可行的解决方向:
重新编译带Profiling支持的musl libc
如果你是自行构建的musl,可以在编译时启用profiling相关配置(比如部分musl补丁集提供CONFIG_PROFILING选项),让musl生成_mcount等gprof依赖符号。如果用的是预编译工具链里的musl,可能需要重新编译整个工具链并配置musl开启profiling。手动添加
_mcount存根函数
写一个简单的_mcount空实现来解决链接错误:void _mcount(void) { // 空实现,仅用于通过链接 }将这个文件编译后和你的项目一起链接。注意:这种方法只能解决链接问题,无法让gprof生成有效的性能分析数据,因为没有实际的计数逻辑。
更换性能分析工具
针对嵌入式系统,gprof并不是唯一选择:- 如果SO3支持,可以尝试使用
perf工具(需要内核支持性能事件); - 轻量场景下可以手动添加插桩代码统计函数耗时;
- 也可以考虑使用ftrace等内核级追踪工具。
- 如果SO3支持,可以尝试使用
内容的提问来源于stack exchange,提问作者AnthoJack
相关产品推荐
相关产品推荐

