Redhat9下重新生成交叉编译器gcc-3.4.5-glibc-2.3.6
看到论坛上有兄弟也遇到 arm-linux-gcc: /lib/tls/libc.so.6: version `GLIBC_2.4`not found (required by arm-linux-gcc) 的问题,估计跟我的情况一样,在这里说一下。
自己主机里用的是Redhat9,gcc编译器版本是3.2.2
解压光盘中的arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2,提示错误:arm-linux-gcc: /lib/tls/libc,so,6: version `GLIBC_2.4`not found (required by arm-linux-gcc)
这是因为光盘中的 arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 是在 ubuntu7.10 中编译生成的,Redhat9 下要重新生成。而从网上直接下的 arm-linux-gcc-3.3.2.tar.bz2 交叉编译工具,编译u-boot时,提示类似 arm-linux-ld: ERROR: /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_clz.oS) uses hardware FP, whereas u-boot uses software FP 这样的错误,这是因为这个交叉编译器不支持软浮点(software FP )。
好,开始制作,依据书上第26页 2.自己制作工具链 到第28页。不过一定要注意,我们在这里就要把create_crosstools下的两个补丁(glibc-2.3.6-version-info.h_err.patch 和 ld-2.15-scratchbox_NATIVE.patch)都打上, 否则编译的时候可能会出下面的错误:
gcc -g -O2 -DIN_GCC -DCROSS_COMPILE -W -Wall -Wwrite-strings -Wstrict-prototy
pes -Wmissing-prototypes -pedantic -Wno-long-long -DHAVE_CONFIG_H -o Tcollec
t2 /
collect2.o tlink.o intl.o version.o ../libiberty/libiberty.a
collect2: ld returned 1 exit status
make[1]: *** [collect2] Error 1
make[1]: Leaving directory `/usr/create_crosstools/crosstool-0.43/build/arm-linu
x/gcc-3.4.5-glibc-2.3.6/build-gcc/gcc'
make: *** [all-gcc] Error 2
开始编译..........,如果你是以 root 用户登陆系统的,可能你会遇到这个问题:
+ echo 'SRC_DIR not set, so source tarballs will be unpacked in the build directory'
SRC_DIR not set, so source tarballs will be unpacked in the build directory
+ abort 'Don'/''t run all.sh or crosstool.sh as root, it'/''s dangerous'
+ echo 'Don'/''t' run all.sh or crosstool.sh as root, 'it'/''s' dangerous
Don't run all.sh or crosstool.sh as root, it's dangerous
+ exec false
看这句 'Don'/''t run all.sh or crosstool.sh as root, it'/''s dangerous',所以我们切换用户,以其他非 root 用户重新登陆,如果遇到提示 权限不够 或是无法进入目录时,su一下就可以了。好了,继续编译吧,不出意外的话两个小时左右之后就会在目录 /work/tools/ 下看到生成的 gcc-3.4.5-glibc-2.3.6 了。