这两天,自己编译了下linux下交叉编译环境。出现了很多问题。虽然现在有些问题还不是很明白,现在还是先把出现的问题和解决的方法总结一下:
安装步骤:
1.安装gcc
如果gcc版本高于4.1版本,首先卸载掉gcc,
使用命令如下:sudo apt-get remove gcc
因为过高的gcc版本会导致编译的时候出现这样的错误提示:
configure:error:
***These critical programs are missing or too old: gccY
*** Check the INSTALL file for required versions.
再下载新的gcc版本
使用命令:
sudo apt-get install gcc-4.1 g++ libgcc1 make gdb bison flex
然后使用:ln -s /usr/bin/gcc-4.1 /usr/bin/gcc 建立连接
否则下载的gcc版本不能在使用gcc命令时候使用。
2.下载crosstool
l 在/home/xp(我的机器名,不同的用户不同)下面建立创建crosstool和downloads两个文件夹
mkdir crosstool
mkdir downloads
修改文件夹权限:
chown xp home/xp/crosstool
chown xp home/xp/downloads
因为下面的编译操作是在当前用户下操作的,如果不修改文件夹权限,那么编译的时候会出现权限不够的错误提示
l 下载crosstool.tar.gz的最新版本到/home/xp/,
解压: tar -zxvf crosstool.tar.gz
进入该目录: cd crosstool.0.43
3.配置文件(在在crosstool.0.43目录中操作)
(1)修改demo-arm.sh文件为:
#!/bin/sh
# This script has one line for each known working toolchain
# for this architecture. Uncomment the one you want.
# Generated by generate-demo.pl from buildlogs/all.dats.txt
set -ex
TARBALLS_DIR=$HOME/downloads
RESULT_TOP=$HOME/crosstool
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++"
export GCC_LANGUAGES
# Really, you should do the mkdir before running this,
# and chown /opt/crosstool to yourself so you don't need to run as root.
mkdir -p $RESULT_TOP
#eval `cat arm9tdmi.dat gcc-2.95.3-glibc-2.1.3.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-2.95.3-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-2.95.3-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest
eval `cat arm.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest
echo Done.
(2)修改arm.dat文件
修改 TARGET="arm-unknown-linux-gnu"
为:TARGET=arm-linux
(3) 进入crosstool 目录执行 demo-arm.sh
在终端中输入 ./demo-arm.sh(注意不是在特权用户下)
这个过程需要长时间,首先要下载文件,然后才开始编译,我的机器编译了大约70分钟。当然,也可以把相关的文件下载到downloads目录下,然后再执行 ./demo-arm.sh
(4) 编译完成,修改环境变量
系统用户下:
cd /etc
gedit environment
添加下面的路径:/home/xp/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/bin
注销,退出,再重新登录,使用下面命令:
arm-linux-gcc -v
提示如下:
Using built-in specs.
Target: arm-linux
Configured with: /home/xp/crosstool-0.43/build/arm-linux/gcc-4.1.1-glibc-2.3.2/gcc-4.1.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/home/xp/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux --with-headers=/home/xp/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/arm-linux/include --with-local-prefix=/home/xp/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/arm-linux --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 4.1.1
如果出现这样的提示,那么就安装成功了!可以使用arm-linux-gcc进行编译,但是在x86架构上不能直接执行,例如执行:
arm-linux-gcc -o test test.c
file test
提示如下:test: ELF 32-bit LSB executable, ARM, version 1, for GNU/Linux 2.4.3, dynamically linked (uses shared libs), not stripped
错误提示:
在编译的过程中,经常出现错误,常见的错误有:
1. )make[2]: *** [/home/xp/crosstool/build/arm-linux/gcc-4.1.1-glibc-2.3.6/build-glibc/csu/version.o] 错误 1
make[2]: Leaving directory `/home/xp/crosstool/build/arm-linux/gcc-4.1.1-glibc-2.3.2/glibc-2.3.6/csu'
make[1]: *** [csu/subdir_lib] 错误 2
make[1]: Leaving directory `/home/xp/crosstool/build/arm-linux/gcc-4.1.1-glibc-2.3.2/glibc-2.3.6'
make: *** [lib] 错误 2
l 这是由version.h文件错误导致的,找到./crosstool/build/arm-linux/gcc-4.1.1-glibc-2.3.2/build-glibc/csu下面的version.h文件,
修改如下:
"Compiled on a Linux >>2.6.22-14-generic<< system on 2008-04-12."
"Available extensions:"
" GNU libio by Per Bothner\n"
" crypt add-on version 2.1 by Michael Glad and others\n"
" linuxthreads-0.10 by Xavier Leroy\n"
" BIND-8.2.3-T5B\n"
" libthread_db work sponsored by Alpha Processor Inc\n"
" NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk\n"
l version-info.h 是由 downloads目录下的glibc-2.3.2 源文件 glibc-2.3.2/csu/ 目录下的Makefile 执行后生成,故错误可能发生在Makefile中。
修改方法:
解压 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的版本,防止误操作损坏。
打包命令如下:
tar –cjf glibc-2.3.2.tar.bz2 glibc-2.3.2.
l 重新编译
如果要编译内核时,因为之前卸载了gcc-4.3,可能随之卸载的有g++、build-essential等,需要重新再安装安装build-essential的时候,又要求要装回gcc-4.2,无奈只好同意。还好的是,对于已经完成的交叉编译不再有影响
很奇怪的一点是,居然没有安装好gdb工具,只好手动安装。安装步骤如下:
l 解压包
tar -jxvf gdb*.bz2
cd gdb*
l 配置
mkdir temp
cd temp
../configure –target=arm-linux --prefix= /home/xp/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux
l 编译安装
make
make install
完成
文章评论(0条评论)
登录后参与讨论