ubuntu 下用 crosstool 建立交叉编译工具链
用到的源码包如下, 建议全部放在 /home/usr/downloads/ 目录下。 以下操作在用户权限下进
行。
=======================================================================
gcc-3.4.1.tar.gz ftp://ftp.gnu.org/gnu/gcc/gcc-3.4.1/
glibc-2.3.3.tar.gz ftp://ftp.gnu.org/gnu/glibc/
linux-2.6.10.tar.gz ftp://ftp.kernel.org/pub/linux/kernel/v2.6/
crosstool-0.43.tar.gz http://kegel.com/crosstool/
binutils-2.15.tar.gz ftp://ftp.gnu.org/gnu/binutils/
glibc-linuxthreads-2.3.3.tar.gz ftp://ftp.gnu.org/gnu/glibc/
binutils-2.18.tar.gz -- 安装用 ftp://ftp.gnu.org/gnu/binutils/
1. 修改 ld 和 as 的版本
编译过程需要用到以下几个软件, 系统本身没有安装, 可以运行安装命令提前做好, 因为编
译一次至少要花半个小时, 如果因为依赖软件没有安装中途会 报错退出, 只有从头再来, 那
样很浪费时间的。
sudo apt-get install bison flex build-essential patch libncurses5-dev
由于 ubuntu10.04 自带的 ld ,as 版本太高的原因,需要安装 binutils 的 2.18 版本,然后
替换系统中的 2.20 版本。方法如下:
$cd downloads
$tar xzvf binutils-2.18.tar.gz
$cd binutils-2.18
$./configure --prefix=/tmp/binutils --disable-nls (-prefix 后面的是生成可执行
文件存放的位置可以自己定义 )
$make all
$make install
编译成功后在 /tmp/binutils/bin/ 中就生成了 ld 和 as 程序的可执行文件
重新链接 /usr/bin/ld 和/usr/bin/as 文件
$sudo rm /usr/bin/ld /usr/bin/as // 删除 2.20 的 ld ,as
$sudo ln –s /tmp/binutils/bin/ld /usr/bin/
$sudo ln –s /tmp/binutils/bin/as /usr/bin/
然后可运行 ld –v 和 as –v 查看版本是否为 2.18 。
安装 2.18 版本可解决出现的 ld as " version too old " 问题。
2. 修改 GCC版本
ubuntu10.04 下默认的 GCC版本是 4.4.3 ,但这个不是版本越高越好, 版本太高, 对语法什么
的要求也高,编译不成功,要降低版本:
#sudo apt-get install gcc-3.4.1 // 安装 3.4.1 的 GCC
#sudo rm /usr/bin/gcc // 删除之前 4.4.3 的快捷方式, 4.4.3 的 GCC并未删除
#sudo ln -s /usr/bin/gcc-3.4.1 /usr/bin/gcc // 建立 3.4.1 的快捷方式
这是由于 crosstool 中定义了 GCC的版本的上下线,最高也就到 4.1 ,在其配置的时候会对