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

交叉编译ARM架构GLIBC 2.25时`loc1@GLIBC_2.4`错误的解决方法

交叉编译GLIBC 2.25 for ARM架构的符号版本错误解决方法

环境信息

  • 目标架构:ARM
  • 交叉编译器版本:
arm-linux-gnueabi-gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0

编译操作步骤

git clone git://sourceware.org/git/glibc.git
cd glibc
git checkout glibc-2.25
mkdir build
cd build
export CC=arm-linux-gnueabi-gcc
export glibc_install="$(pwd)/install"
../configure --prefix "$glibc_install" --host=arm-linux-gnueabi --disable-werror
make

编译错误信息

make[2]: Entering directory '/home/user/Desktop/glibc/misc'
arm-linux-gnueabi-gcc regexp.c -c -std=gnu11 -fgnu89-inline  -O2 -Wall -Wundef -Wwrite-strings -fmerge-all-constants -fno-stack-protector -frounding-math -g -Wstrict-prototypes -Wold-style-definition   -fPIC   -ftls-model=initial-exec   -U_FORTIFY_SOURCE   -I../include -I/home/user/Desktop/glibc/build/misc  -I/home/user/Desktop/glibc/build  -I../sysdeps/unix/sysv/linux/arm  -I../sysdeps/arm/nptl  -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux  -I../sysdeps/nptl  -I../sysdeps/pthread  -I../sysdeps/gnu  -I../sysdeps/unix/inet  -I../sysdeps/unix/sysv  -I../sysdeps/unix/arm  -I../sysdeps/unix  -I../sysdeps/posix  -I../sysdeps/arm/include -I../sysdeps/arm  -I../sysdeps/wordsize-32  -I../sysdeps/ieee754/flt-32  -I../sysdeps/ieee754/dbl-64  -I../sysdeps/ieee754  -I../sysdeps/generic  -I.. -I../libio -I.   -D_LIBC_REENTRANT -include /home/user/Desktop/glibc/build/libc-modules.h -DMODULE_NAME=libc -include ../include/libc-symbols.h  -DPIC -DSHARED     -o /home/user/Desktop/glibc/build/misc/regexp.os -MD -MP -MF /home/user/Desktop/glibc/build/misc/regexp.os.dt -MT /home/user/Desktop/glibc/build/misc/regexp.os
/tmp/ccNe3Uva.s: Assembler messages:
/tmp/ccNe3Uva.s: Error: `loc1@GLIBC_2.4' can't be versioned to common symbol 'loc1'
/tmp/ccNe3Uva.s: Error: `loc2@GLIBC_2.4' can't be versioned to common symbol 'loc2'
/tmp/ccNe3Uva.s: Error: `locs@GLIBC_2.4' can't be versioned to common symbol 'locs'
make[2]: *** [../o-iterator.mk:9: /home/user/Desktop/glibc/build/misc/regexp.os] Error 1
make[2]: Leaving directory '/home/user/Desktop/glibc/misc'
make[1]: *** [Makefile:215: misc/subdir_lib] Error 2
make[1]: Leaving directory '/home/user/Desktop/glibc'
make: *** [Makefile:9: all] Error 2 

解决方法

该错误源于高版本GCC(9.x)对符号版本的处理更严格,而GLIBC 2.25的代码未适配此变化,可通过以下方式解决:

方法1:添加编译选项强制转换公共符号

在编译阶段添加-fno-common选项,避免编译器将未初始化的全局变量标记为公共符号,从而允许符号版本化:

# 清理原有构建文件后重新配置编译
cd build
rm -rf *
export CC=arm-linux-gnueabi-gcc
export CFLAGS="-fno-common"
export glibc_install="$(pwd)/install"
../configure --prefix "$glibc_install" --host=arm-linux-gnueabi --disable-werror
make

方法2:使用兼容版本的GCC

GLIBC 2.25官方推荐适配的GCC版本为4.9至6.x区间,可安装对应版本的交叉编译器(如arm-linux-gnueabi-gcc-6),替换当前编译器后重新执行编译流程。

方法3:手动修改GLIBC代码

针对报错的全局变量显式初始化,避免被识别为公共符号:

  1. 打开glibc/misc/regexp.c文件
  2. 找到变量定义行:
    static char *loc1, *loc2, *locs;
    
    修改为:
    static char *loc1 = NULL, *loc2 = NULL, *locs = NULL;
    
  3. 保存文件后重新执行make

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:40:24