自制交叉编译工具链接:自己编译一个arm-linux-gcc

关于linaro参见其官网www.linaro.org

gcc-linara源码可以从这个网址下载  http://launchpad.net/gcc-linaro/+milestone/4.8-2013.10
gcc的编译依赖于几个库,GMP,MPFR,MPC,首先需要编译他们,从 ftp://gcc.gnu.org/pub/gcc/infrastructure/  下载这几个库的源代码。
1. 编译GMP    ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
解压后使用标准的GNU源码编译方法
./configure  --prefix=/home/jqzeng/tools/gmp
make
make install
--host指定的是编译所用主机类型
2. 编译MPFR   ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
./configure  --prefix=/home/jqzeng/tools/mpfr --with-gmp=/home/jqzeng/tools/gmp
make && make install
3.编译MPC   ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
./configure --prefix=/home/jqzeng/tools/mpc --with-gmp=/home/jqzeng/tools/gmp --with-mpfr=/home/jqzeng/tools/mpfr
make && make install
4.编译isl 下载地址  http://isl.gforge.inria.fr/isl-0.12.tar.gz
./configure --prefix=/home/jqzeng/tools/isl --with-gmp-prefix=/home/jqzeng/tools/gmp
make && make install
5.编译cloog   下载地址 http://www.bastoul.net/cloog/pages/download/count.php3?url=./cloog-0.18.1.tar.gz
./configure  --prefix=/home/jqzeng/tools/cloog --with-gmp-prefix=/home/jqzeng/tools/gmp
make && make install
6.编译libelf   下载地址 http://www.mr511.de/software/libelf-0.8.9.tar.gz
 ./configure --prefix=/home/jqzeng/tools/libelf
make && make install
7.编译binutils http://releases.linaro.org/13.10/components/toolchain/binutils-linaro
./configure --prefix=/usr/local/linaro-gcc --with-sysroot=/usr/local/arm-linux/arm-linux-gnueabi/libc --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabi --with-gmp=/home/jqzeng/tools/gmp --with-isl=/home/jqzeng/tools/isl  --with-mpfr=/home/jqzeng/tools/mpfr --with-mpc=/home/jqzeng/tools/mpc
make 
sudo make install
加上--with-sysroot是很重要的,否则编译gcc的时候会出现“ld:this linker was not configured to use sysroots”的错误。
8. 安装内核头文件
解压内核并cd到源码目录,执行下面的命令构建sanitized 版本内核头文件。
make ARCH=arm headers_check
 sudo make ARCH=arm INSTALL_HDR_PATH=/usr/local/arm-linux/arm-linux-gnueabi/libc/usr headers_install
9. 编译c库头文件   eglibc  http://releases.linaro.org/13.10/components/toolchain/eglibc-linaro/eglibc-linaro-2.18-2013.10.tar.bz2
mkdir build

CC=gcc ../configure  --prefix=/usr/local/arm-linux/arm-linux-gnueabi/libc/usr --build=x86_64-linux-gnu  --host=arm-linux-gnueabi  --with-header=/usr/local/arm-linux/arm-linux-gnueabi/libc/usr/include 
sudo make install-headers
注意这里设置的--host是目标板,与其他地方的不一样。
内核头文件和C库头文件放在sysroot下, 消除 缺少头文件的问题“ The directory that should contain system headers does not exist” 
10.编译用于编译glibc的 gcc
解压gcc-linara,cd到源码目录
mkdir build
cd build
../gcc-linaro-4.8-2013.10/configure --prefix=/usr/local/arm-linux  --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabi --with-gmp=/home/jqzeng/tools/gmp 
 --with-mpfr=/home/jqzeng/tools/mpfr --with-mpc=/home/jqzeng/tools/mpc --with-isl=/home/jqzeng/tools/isl --with-cloog=/home/jqzeng/tools/cloog 
--with-libelf=/home/jqzeng/tools/libelf --enable-languages=c,c++,fortran --enable-multilib --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3-d16 --with-float=hard 
--enable-__cxa_atexit --enable-libmudflap --enable-libgomp --enable-libssp --enable-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-gold  --enable-c99 
--enable-long-long --with-mode=thumb --with-sysroot=/usr/local/linaro-gcc/arm-linux-gnueabi/libc --with-local-prefix=/usr/local/linaro-gcc/arm-linux-gnueabi/libc
make -j4


到这里配置出错了
checking for version 0.10 of ISL... no
checking for version 0.11 of ISL... no
checking for version 0.12 of ISL... no
configure: error: Unable to find a usable ISL.  See config.log for details.
打开config.log
configure:5857: checking for version 0.10 of ISL
configure:5876: x86_64-linux-gnu-gcc -o conftest -g -O2 -I/home/jqzeng/tools/isl/include -I/home/jqzeng/tools/gmp/include -I/home/jqzeng/tools/mpfr/include -I/home/jqzeng/tools/mpc/include    -L/home/jqzeng/tools/isl/lib conftest.c  -lisl >&5
configure:5876: $? = 0
configure:5876: ./conftest
./conftest: error  while loading shared libraries: libisl.so.10: cannot open shared object file: No such file or directory
configure:5876: $? = 127
configure: program exited with status 127
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME ""
| #define PACKAGE_TARNAME ""
| #define PACKAGE_VERSION ""
| #define PACKAGE_STRING ""
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define LT_OBJDIR ".libs/"
| /* end confdefs.h.  */
| #include <isl/version.h>
|    #include <string.h>
| int
| main ()
| {
| if (strncmp (isl_version (), "isl-0.10", strlen ("isl-0.10")) != 0)
|      return 1;
|
|   ;
|   return 0;
| }
configure:5885: result: no
configure:5905: checking for version 0.11 of ISL
configure:5924: x86_64-linux-gnu-gcc -o conftest -g -O2 -I/home/jqzeng/tools/isl/include -I/home/jqzeng/tools/gmp/include -I/home/jqzeng/tools/mpfr/include -I/home/jqzeng/tools/mpc/include    -L/home/jqzeng/tools/isl/lib conftest.c  -lisl >&5
configure:5924: $? = 0
configure:5924: ./conftest
好吧,是加载动态库的时候出问题了。
 sudo vim /etc/ld.so.conf.d/ld.isl.so.conf
将isl的lib库的绝对路径写入ld.isl.so.conf文件中 /home/jqzeng/tools/isl/lib
顺便将tools目录下的其他动态库的路径都加上
执行下面的命令重建 /etc/ld.so.cache
sudo ldconfig
重新来一遍配置gcc-linara。
执行make,喝杯咖啡歇会,这是个漫长的过程。
sudo make install

11 编译eglibc
 CC=arm-linux-gnueabi-gcc ../configure  --prefix=/usr/local/arm-linux/arm-linux-gnueabi/libc/ --build=x86_64-linux-gnu --host=arm-linux-gnueabi 
--with-header=/usr/local/arm-linux/arm-linux-gnueabi/libc/usr/include --enable-add-ons --with-binutils=/usr/local/arm-linux/bin --enable-shared libc_cv_forced_unwind=yes 
libc_cv_c_cleanup=yes
make 
sudo make install

好吧,现在工具链已经编译完成,下一步是使用该工具链编译uboot和kernel。



转自:http://blog.chinaunix.net/uid-24943863-id-3997047.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 交叉编译工具arm-linux-gcc-3.4.1.tar.bz2是一个用于在x86架构的计算机上编译生成运行在ARM架构处理器上的软件的工具ARM处理器通常用于嵌入式系统和移动设备。 这个工具一个tar.bz2格式的压缩文件,需要通过解压缩来获取其中的文件。一般的解压缩软件如tar和bzip2可以用来解压这个文件。解压缩后,我们可以得到一个目录,其中包含了交叉编译工具链的各个组件。 这个工具中最关键的组件是arm-linux-gcc,它是一款ARM架构的C编译器。它允许我们在x86架构的计算机上编译ARM平台的C语言源代码,并生成适用于ARM处理器的可执行程序。除了C语言,arm-linux-gcc还支持C++和其他一些常用的编程语言。 使用交叉编译工具arm-linux-gcc,我们可以在开发软件时将代码编译ARM平台可执行文件,而不需要在ARM设备上进行开发和编译。这样可以提高开发效率并简化调试过程。开发人员可以直接在自己的PC上编写和测试代码,然后使用交叉编译工具生成ARM平台可执行文件,再将其上传到ARM设备上运行。 总之,交叉编译工具arm-linux-gcc-3.4.1.tar.bz2是一个用于在x86架构计算机上编译ARM平台可执行文件的工具链,它提供了一系列的工具和组件,其中最重要的是arm-linux-gcc编译器。使用这个工具,开发人员可以在PC上进行ARM开发和调试,提高开发效率并简化部署过程。 ### 回答2: arm-linux-gcc-3.4.1.tar.bz2是一种交叉编译工具交叉编译是指在一种操作系统上编译运行在另一种操作系统中运行的程序。 arm-linux-gcc-3.4.1.tar.bz2是专门为ARM架构设计的编译工具ARM架构是一种广泛应用于嵌入式设备中的处理器架构。由于ARM处理器具有低功耗、低成本和高性能的特点,因此在移动设备、智能家居、工业自动化等领域得到广泛应用。 arm-linux-gcc-3.4.1.tar.bz2是GNU Compiler Collection(GCC)的一个特定版本。GCC是一种开源的编译器套件,支持多种编程语言,包括C、C++和Fortran等。通过使用arm-linux-gcc-3.4.1.tar.bz2,开发人员可以在主机操作系统(通常是x86架构)上编译适用于ARM处理器的程序。 交叉编译工具arm-linux-gcc-3.4.1.tar.bz2使用.tar.bz2的压缩格式打包。用户需要先解压缩该文件,然后根据安装指南进行安装和配置。安装成功后,用户可以使用该工具链进行ARM架构的程序开发和编译。 在交叉编译过程中,需要设置正确的目标架构和其他相关参数,以确保生成的可执行文件可以在ARM设备上正确运行。交叉编译工具可以生成与目标设备兼容的二进制代码,并处理与特定硬件平台相关的问题,如指令集、内存管理等。 通过使用arm-linux-gcc-3.4.1.tar.bz2,开发人员可以更加方便地进行ARM设备上的软件开发。这个工具链为ARM平台上的开发者提供了编译链接和调试等必要的工具。它有助于简化开发流程,提高开发效率,并确保生成的程序在ARM设备上的正确运行。 ### 回答3: 交叉编译工具arm-linux-gcc-3.4.1.tar.bz2 是一个用于ARM架构的交叉编译工具交叉编译是指在一种平台上开发、编译和生成另一种平台上可执行的程序。ARM是一种广泛应用于嵌入式设备的处理器架构,通过使用交叉编译工具,开发者可以在PC机上编写并编译ARM架构的程序。 arm-linux-gcc-3.4.1.tar.bz2 是一个tar压缩和bzip2压缩的文件。tar是一种文件打包的格式,bzip2是一种压缩格式。因此,首先需要将该文件解压缩。可以使用tar和bzip2命令来进行解压缩操作。 解压缩后,可以得到一个目录,里面包含了arm-linux-gcc-3.4.1工具链的文件。工具链是一组可以在一台计算机上生成可在另一种架构上运行的程序的工具。 在使用交叉编译工具之前,还需要将工具链的路径添加到系统的环境变量中,这样系统才能够找到正确的工具链。 使用arm-linux-gcc-3.4.1工具链可以在PC机上编写ARM架构的程序,并通过交叉编译生成可在ARM设备上运行的可执行程序。通过交叉编译,开发者可以更方便地开发和调试ARM设备的程序,同时提高了开发效率。 总之,arm-linux-gcc-3.4.1.tar.bz2 是一个交叉编译工具,通过解压缩该文件并配置环境变量后,开发者可以在PC机上编写并编译ARM架构的程序。这样可以简化ARM设备的开发和调试过程,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值