You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移至aarch64后出现undefined reference@GLIBC错误,该如何解读?

链接器错误含义解析

错误核心说明

你碰到的undefined reference to 'exp10@GLIBC_2.39'这类错误,本质是链接阶段找不到带版本标记的GLIBC符号定义:

  • exp10是GLIBC提供的数学计算函数;
  • @GLIBC_2.39是符号的版本标签,表明这个函数是在GLIBC 2.39版本中新增或完成版本更新的;
  • 链接器处理libsystemd.so.0时,发现它依赖这个特定版本的exp10符号,但当前交叉编译器的sysroot环境里的GLIBC库,要么没有这个符号,要么符号的版本不匹配。

你的场景问题根源

你的情况里关键矛盾点在于:

  1. 目标系统的GLIBC版本是2.41(高于2.39),理论上应该包含exp10@GLIBC_2.39;
  2. 但你使用的x-tools交叉编译器,其自带的sysroot目录(/home/jacek/x-tools/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot/)里的GLIBC版本,大概率低于2.39,或者该版本GLIBC未导出exp10的2.39版本标记。

交叉编译器的sysroot是独立环境,和主机、目标系统的系统库完全分开——你提到“确保主机与目标系统的库一致”,但没同步交叉编译器sysroot内的库,这才是问题的核心。

验证方法

可以直接检查交叉编译器sysroot中的GLIBC是否包含目标符号:

# 查看交叉编译器sysroot下libc.so.6的exp10符号信息
/home/jacek/x-tools/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-readelf -s /home/jacek/x-tools/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot/usr/lib/libc.so.6 | grep exp10

如果输出中没有exp10@GLIBC_2.39,就说明交叉编译器的GLIBC确实不支持该符号版本。

解决方向

  • 同步交叉编译器sysroot库:将目标系统(GLIBC 2.41版本)的libc.so.6、libm.so.6等GLIBC相关库,替换交叉编译器sysroot对应目录下的文件;
  • 升级交叉编译器:更换为基于GLIBC 2.39及以上版本构建的aarch64交叉编译工具链;
  • 确认库的编译适配性:检查libsystemd.so.0是否是针对目标系统GLIBC版本编译的,确保是对应aarch64架构、匹配GLIBC版本的官方包。

内容的提问来源于stack exchange,提问作者Neppomuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 15:04:58