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

从Ubuntu20升级到22.04后交叉编译失败,求助解决方案

交叉编译升级Ubuntu后出现GLIBC_PRIVATE未定义引用问题

问题场景

在Ubuntu 20.04系统中,使用arm-linux-gnueabihf-g++配合QT Creator中为设备定制编译的Qt 5.12.3工具链进行交叉编译完全正常。但升级到Ubuntu 22.04后出现交叉编译失败,链接器输出如下错误:

/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/libpthread.so.0: undefined reference to '_dl_make_stack_executable@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/libpthread.so.0: undefined reference to '__libc_dlclose@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/librt.so.1: undefined reference to '__libc_dlopen_mode@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/libpthread.so.0: undefined reference to '__libc_longjmp@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/libpthread.so.0: undefined reference to '__libc_dl_error_tsd@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/libpthread.so.0: undefined reference to '__libc_vfork@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/libpthread.so.0: undefined reference to '__libc_allocate_rtsig_private@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/librt.so.1: undefined reference to '__clock_getres@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/libpthread.so.0: undefined reference to '__libc_thread_freeres@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/librt.so.1: undefined reference to '__clock_getcpuclockid@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/libdl.so.2: undefined reference to '_dl_addr@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/libpthread.so.0: undefined reference to '__libc_pthread_init@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/libpthread.so.0: undefined reference to '__libc_current_sigrtmin_private@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/libdl.so.2: undefined reference to '_dl_sym@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/librt.so.1: undefined reference to '__clock_nanosleep@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/librt.so.1: undefined reference to '__libc_dlsym@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/libpthread.so.0: undefined reference to '__libc_current_sigrtmax_private@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/libdl.so.2: undefined reference to '_dl_vsym@GLIBC_PRIVATE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/11/../../../../arm-linux-gnueabihf/bin/ld: /home/asianirish/img/armbian/lib/arm-linux-gnueabihf/librt.so.1: undefined reference to '__clock_settime@GLIBC_PRIVATE'
collect2: error: ld returned 1 exit status

(Sysroot路径:/home/asianirish/img/armbian)

问题原因

这是交叉编译器与sysroot中GLIBC版本不兼容导致的:

  • Ubuntu 20.04自带的arm-linux-gnueabihf-gcc是9.x版本,其依赖的GLIBC内部符号与你sysroot中Armbian系统的GLIBC版本匹配;
  • 升级到Ubuntu 22.04后,交叉编译器版本升级到11.x,对应的GLIBC内部符号(即报错中的GLIBC_PRIVATE标记符号)发生了变化,而你sysroot中的GLIBC库版本较低,没有这些新的内部符号,因此链接器无法找到对应的定义,出现未引用错误。

解决方法

方法一:降级交叉编译器版本

安装Ubuntu 20.04(Focal)版本的交叉编译工具链,确保与原sysroot的GLIBC版本兼容:

# 添加Focal版本的Ubuntu源
echo "deb http://archive.ubuntu.com/ubuntu focal main universe" | sudo tee /etc/apt/sources.list.d/focal.list
sudo apt update
# 安装9.x版本的交叉编译工具
sudo apt install gcc-9-arm-linux-gnueabihf g++-9-arm-linux-gnueabihf
# 设置默认使用9.x版本的交叉编译器
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcc arm-linux-gnueabihf-gcc /usr/bin/arm-linux-gnueabihf-gcc-9 100
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-g++ arm-linux-gnueabihf-g++ /usr/bin/arm-linux-gnueabihf-g++-9 100

方法二:更新sysroot中的GLIBC库

替换sysroot(/home/asianirish/img/armbian)内的GLIBC相关库(如libc.so.6、libpthread.so.0等)为与Ubuntu 22.04交叉编译器匹配的版本,或者直接下载对应版本的Armbian系统镜像重新生成sysroot。注意替换时要保证库版本完全兼容,避免运行时出现兼容性问题。

方法三:使用独立交叉工具链

自行编译与Ubuntu 20.04版本一致的交叉工具链,或者使用crosstool-ng构建独立的工具链,与系统自带工具链隔离,保持编译环境与之前完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:57:00