这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 在 Fedora 下建立 ARM-Linux 交叉编译环境

共2条 1/1 1 跳转至

在 Fedora 下建立 ARM-Linux 交叉编译环境

工程师
2012-03-07 23:21:23     打赏
(1)编译到glibc的时候,在配置的时候会检测gcc的版本,configure 脚本认为gcc-4.3.2版本太老(其实是因为当时gcc还没有这么高的版本,只要不是3.2到4.1之间的版本,都认为too old),不能编译。 这是可以解决的,方法就是修改glibc-2.3.2根目录下的configure 文件中的第1275行: test -n "$CC" && break done if test -z "$CC"; then ac_verc_fail=yes else # Found it, now check the version. echo "$as_meLINENO: checking version of $CC" &5 echo $ECHO_N "checking version of $CC... $ECHO_C" &6 ac_prog_version=`$CC -v 2&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 3.[2-9]*|4.[0-3]*) ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; 这样就可以骗过configure ,继续编译下去。 但是修改的时机要把握好,要在 demo-arm9tdmi.sh解压完glibc-2.3.2后,运行其configure之前。我直接就将configure拷出来,修改后在crosstool解压完所有文件后直接覆盖源文件。 其实这种方法我在fedora9下使用crosstool时就用过,但是当时发现f9真是做得比f8差,历史的倒退,所以就到回去用f8了,就没写文章总结。 (2)编译gcc-3.3.6的时候,出现以下错误: /usr/include/bits/fcntl2.h:51: error: call to '__open_missing_mode' declared with attribute error: open with O_CREAT in second argument needs 3 arguments 这纯属软件bug,因为使用open函数的时候,如果在第二个参数中使用了 O_CREAT,就必须添加第三个参数:创建文件时赋予的初始权限。而在gcc-3.3.6/gcc/的collect2.c文件中有漏掉第三个参数的错误,而gcc-4.3对语法错误的检查严格是出了名的(4.1就不会因此错误退出),所以就退出了。 这也是可以解决的,就是在gcc-3.3.6/gcc/collect2.c中的第1575行改为: redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT, 0777); 我还发现glibc-2.3.2/login/tst-grantpt.c也有一个类似错误,一起改过来,除后患。第44行: fd = open (file, O_RDWR | O_CREAT, 0777); 修改的时机也要把握好,我是在crosstool解压完所有文件后和之前configure 文件一起直接覆盖源文件。 (3)经历了以上的痛苦后,继续编译,会出现以下错误: *** buffer overflow detected ***: arm-9tdmi-linux-gnu-ar terminated **!!!!!!!!编译出来的 arm-9tdmi-linux-gnu-ar根本没法用!被耍了!放弃gcc-4.3.2!!!!! 要是哪位仁兄解决了以上问题,并编译成功,一定要通知小弟啊! (4)安装了gcc-4.1之后,重新编译。心想这回好了吧?!不想,有出了以下错误: In file included from version.c:33: /home/tekkaman/working/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-4.1.1-glibc-2.3.2/build-glibc/csu/version-info.h:2:1: missing terminating " character /home/tekkaman/working/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-4.1.1-glibc-2.3.2/build-glibc/csu/version-info.h:3:1: missing terminating " character google后发现,原来是ubuntu将系统默认的shell设置成了dash (the Debian Almquist Shell),所以通过脚本生成的文件格式和bash的不一样,导致了编译错误。在使用了 ursa 的方法后问题解决。 sudo mv /bin/sh /bin/sh.old sudo ln -sf bash /bin/sh (5)继续重新编译,在gcc做好后(此时gcc已可用,只是gdb还没编译好),编译gdb的时候出了以下错误: configure: error: no termcap library found 很显然,是因为没装一个库文件造成的,google后发现正解:用新立得安装libncurses5-dev(或是apt-get install libncurses5-dev)即可。



关键词: Fedora     建立     ARM-Linux     交叉     编译    

工程师
2012-03-08 21:03:03     打赏
2楼
写的太乱了也、、、、

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]