1.软件包及软件版本的选择
crosstool-0.43出来时间比较早,但去官网()看下也是最新的版本了,只能用其之。虽然crosstool久未更新,但其它的相关源码都在更新,如何选择匹配的代码版本就是一个问题了。
我的做法是:解压缩crosstool-0.43.tar.gz后,在crosstool-0.43目录下浏览gcc-*.*.*-glibc-2.*.*(-tls).dat文件。选取一个自己觉得比较合适的打开,按照里面要的下载相应的软件包
以gcc-4.1.0-glibc-2.3.2.dat为例:
文件中列出的软件包有:
BINUTILS_DIR=binutils-2.16.1
GCC_CORE_DIR=gcc-3.3.6
GCC_DIR=gcc-4.1.0
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.15.4 #改为 LINUX_DIR=linux-2.6.32
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GDB_DIR=gdb-6.5
其中,我只更换了linux内核包的版本,选取了最新的 linux-2.6.32.其它保持不变。
2.运行./arm.sh,出现Don't run all.sh or crosstool.sh as root, it's dangerous 错误!
不能在root下运行脚本。但是exit root后,又permission denied错误。这个错误可能是一开始自己的一些操作不对。但我开始的做法是all.sh脚本里,检查用户的部分去掉了,仍就以root身份运行。
3.文档没看仔细,以为将下载下来的软件包解压到downloads目录,其实,只要就压缩包放到里面就可以了。
4.预先安装bison、flex、patch、(m4)软件。
我用的是Ubuntu系统,前两个会直接提示,patch包会以下面的错误提示:
applying patch /home/ljd/downloads/crosstool-0.43/patches/glibc-2.3.2/arm-asm-clobber.patch
getandpatch.sh: 1: patch: not found
patch /home/ljd/downloads/crosstool-0.43/patches/glibc-2.3.2/arm-asm-clobber.patch failed
ubuntu下的安装方法root权限运行(前提是ubuntu能上网):
apt-get install bison
apt-get install flex
apt-get install patch
中间过程还会安装m4。
接下来的三个问题,正好看到网上有一个人(只他一个啊)和我碰到一样,要是自己解决一定会抓狂地把自己的心都掏了。
4.错误LOG
checking target system type... Invalid configuration `arm-linux-': system `' not recognized
configure: error: /bin/sh /home/toolchains/crosstool-0.43/build/arm-linux-/gcc-4.1.0-glibc-2.3.2/binutils-2.16.1/bfd/../config.sub arm-linux- failed
make: *** [configure-bfd] 错误
设错了:TARGET=arm-linux- 应该为:TARGET=arm-linux
5.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命令时候使用。
6.不知道的错误,幸好看到别人说了。
编译再次出现了错误,内容如下:
In file included from version.c:33:
/home/davidchen/crosstool-0.43/build/arm-linux/gcc-4.1.0-glibc-2.3.2/build-glibc/csu/version-info.h:1:1: missing terminating " character
/home/davidchen/crosstool-0.43/build/arm-linux/gcc-4.1.0-glibc-2.3.2/build-glibc/csu/version-info.h:2:1: missing terminating " character
/home/davidchen/crosstool-0.43/build/arm-linux/gcc-4.1.0-glibc-2.3.2/build-glibc/csu/version-info.h:3:1: missing terminating " character
/home/davidchen/crosstool-0.43/build/arm-linux/gcc-4.1.0-glibc-2.3.2/build-glibc/csu/version-info.h:4:1: missing terminating " character
make[2]: *** [/home/davidchen/crosstool-0.43/build/arm-linux/gcc-4.1.0-glibc-2.3.2/build-glibc/csu/version.o] 错误 1
make[2]:正在离开目录 /home/davidchen/crosstool-0.43/build/arm-linux/gcc-4.1.0-glibc-2.3.2/glibc-2.3.2/csu'
make[1]: *** [csu/subdir_lib] 错误 2
make[1]:正在离开目录 ` /home/davidchen/crosstool-0.43/build/arm-linux/gcc-4.1.0-glibc-2.3.2/glibc-2.3.2'
make: *** [all] 错误 2
原因是系统在编译生成version.o时候发现version-info.h文件有错误。version-info.h是由downloads目录下的glibc-2.3.2.tar.gz源文件解压后glibc-2.3.2/csu/目录下的Makefile执行后生成故错误可能发生在Makefile中。这个问题是由ubuntu8.04系统本身造成的。修改方法:解压glibc-2.3.2.tar.gz,找到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.gz覆盖原来downloads目录下的glibc-2.3.2.tar.gz,注意新建立的压缩文件是允许被程序直接执行的(右键单击选属性把允许被程序直接执行前面的框选上)。
参考网页: [url=][color=#0000ff][/color][/url] 改变$PATH变量:(1)在/etc/profile中添加PATH="$PATH:/yourpath" (2)在/home/youname/.bashrc中添加export PATH=”$PATH:/your path1/:/your path2/…..” 如果要使得计时生效,使用 source 命令:source .bashrc 注意:在修改了PATH值或任何环境变量后,都要用export将其输出,新的PATH值才能生效。
阅读(2543) | 评论(0) | 转发(0) |