使用crosstool-0.43 在Linux环境下构建 MIPS 交叉编译器
最初步骤参见前面关于ARM的描述,这里主要解决在构建过程中遇到的错误。
编译选择的版本是: gcc-4.0.0-glibc-2.3.2.dat
其内容为:
BINUTILS_DIR=binutils-2.16.1
GCC_DIR=gcc-4.0.0
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.15.4
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GCC_CORE_DIR=gcc-3.3.6
出现的错误:
1. 编译过程中出现一个问题,说是gcc版本太旧,其实是gcc版本太新了,解决如下 :
sudo apt-get install gcc-3.4
cd /usr/bin
sudo rm gcc
ln -s gcc-3.4 gcc
注意编译完成以后要恢复成原来的版本,如下:
cd /usr/bin
sudo rm gcc
ln -s gcc-4.3 gcc
2.Error: operation combines symbols in different segments
make[2]: *** [libgcc/./_divdi3.o] Error 1
具体解决方式为:
在binutils-2.16/gas/config/tc-mips.h
最后#endif 前面加上
#define UNDEFINED_DIFFERENCE_OK
在binutils-2.16/gas/expr.c
将#ifdef DIFF_EXPR_OK
更换为
#if ((defined DIFF_EXPR_OK) || (defined TC_MIPS))
这样再编译就正常编译了。
3.出现如:build-glibc/csu/version-info.h:1:1: missing terminating " character
系统在编译生成version.o时候发现version-info.h文件有错误,解决方法:
解压glibc-2.3.2.tar.bz2
找到glibc-2.3.2/csu目录下的Makefile按如下修改
文件末尾有2处echo
echo
"/"Compiled on a $$os $$version system" /
"on
`date +%Y-%m-%d`.//n/"" ;; /
改为:
echo
"/"Compiled on a $$os $$version system" /
"on
`date +%Y-%m-%d`.n/"" ;; /
echo
"/"Available extensions://n/"";
改为:
echo
"/"Available extensions:n/"" /
保存并重新压缩为glibc-2.3.2.tar.bz2 覆盖原来downloads目录下的glibc-2.3.2.tar.bz2,转到crosstool-0.43目录下从新执行。
最初步骤参见前面关于ARM的描述,这里主要解决在构建过程中遇到的错误。
编译选择的版本是: gcc-4.0.0-glibc-2.3.2.dat
其内容为:
BINUTILS_DIR=binutils-2.16.1
GCC_DIR=gcc-4.0.0
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.15.4
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GCC_CORE_DIR=gcc-3.3.6
出现的错误:
1. 编译过程中出现一个问题,说是gcc版本太旧,其实是gcc版本太新了,解决如下 :
sudo apt-get install gcc-3.4
cd /usr/bin
sudo rm gcc
ln -s gcc-3.4 gcc
注意编译完成以后要恢复成原来的版本,如下:
cd /usr/bin
sudo rm gcc
ln -s gcc-4.3 gcc
2.Error: operation combines symbols in different segments
make[2]: *** [libgcc/./_divdi3.o] Error 1
具体解决方式为:
在binutils-2.16/gas/config/tc-mips.h
最后#endif 前面加上
#define UNDEFINED_DIFFERENCE_OK
在binutils-2.16/gas/expr.c
将#ifdef DIFF_EXPR_OK
更换为
#if ((defined DIFF_EXPR_OK) || (defined TC_MIPS))
这样再编译就正常编译了。
3.出现如:build-glibc/csu/version-info.h:1:1: missing terminating " character
系统在编译生成version.o时候发现version-info.h文件有错误,解决方法:
解压glibc-2.3.2.tar.bz2
找到glibc-2.3.2/csu目录下的Makefile按如下修改
文件末尾有2处echo
echo
"/"Compiled on a $$os $$version system" /
"on
`date +%Y-%m-%d`.//n/"" ;; /
改为:
echo
"/"Compiled on a $$os $$version system" /
"on
`date +%Y-%m-%d`.n/"" ;; /
echo
"/"Available extensions://n/"";
改为:
echo
"/"Available extensions:n/"" /
保存并重新压缩为glibc-2.3.2.tar.bz2 覆盖原来downloads目录下的glibc-2.3.2.tar.bz2,转到crosstool-0.43目录下从新执行。