1. build gcc 時可以下 make all-gcc 及 make all-install,如此只編譯 gcc,g++,其它的連結庫就不會去編譯,而造成一堆錯誤。

2. crt0.o 是古老的 a.out 時代使用的初始化代碼,而在 uClibc-0.9.28 以上的版本都改成 crt1.o,而在 build gcc 時,arm-elf 的版本仍然是採用 crt0.o,所以不想改源碼,就用 uClibc-0.9.27 吧。

3. 修正 arm-elf 版的初始化 object 為 crt1.o。
modify /sigma/toolchains/gcc-3.4.6/gcc/config/arm/unknown-elf.h line 38
#define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
==>
#define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt1%O%s"

4. build gcc 完後,如果要加入的 include 可放置 xxx/arm-elf/include,gcc 都會到這裏找 include file。

5. build gcc 完後,如果要加入的 library 可放置 xxx/arm-elf/lib,gcc 都會到這裏找 library file。

6. 如果只是要編 language c 則不需要 newlib,但是要有 c++ language 時,必需包含 newlib,而且需要 1.14.0,不要 1.15.0,編譯會過不了。

7. 一開始 build gcc 時,先用 make all-gcc,不要用 make all,會出現下列的錯誤。
/sigma/toolchains/arm/arm-elf/bin/ld.real: crt0.o: No such file: No such file or directory
collect2: ld returned 1 exit status
*** The command ' /sigma/toolchains/build-gcc/gcc/xgcc -B/sigma/toolchains/build-gcc/gcc/ -nostdinc -B/sigma/toolchains/build-gcc/arm-elf/newlib/ -isystem /sigma/toolchains/build-gcc/arm-elf/newlib/targ-include -isystem /sigma/toolchains/gcc-3.4.6/newlib/libc/include -B/sigma/toolchains/arm/arm-elf/bin/ -B/sigma/toolchains/arm/arm-elf/lib/ -isystem /sigma/toolchains/arm/arm-elf/include -isystem /sigma/toolchains/arm/arm-elf/sys-include -o conftest -O2 -g -O2 -O2 -g -O2 conftest.c' failed.
*** You must set the environment variable CC to a working compiler.
make: *** [configure-target-newlib] Error 1

8. with-headers=kernel-include 會造成下列錯誤,千萬不要用,改用 without-headers。
In file included from ../../gcc-3.4.6/gcc/crtstuff.c:62:
../../gcc-3.4.6/gcc/tsystem.h:79:19: stdio.h: No such file or directory
../../gcc-3.4.6/gcc/tsystem.h:82:23: sys/types.h: No such file or directory
../../gcc-3.4.6/gcc/tsystem.h:85:19: errno.h: No such file or directory
../../gcc-3.4.6/gcc/tsystem.h:92:20: string.h: No such file or directory
../../gcc-3.4.6/gcc/tsystem.h:93:20: stdlib.h: No such file or directory
../../gcc-3.4.6/gcc/tsystem.h:94:20: unistd.h: No such file or directory
../../gcc-3.4.6/gcc/tsystem.h:100:18: time.h: No such file or directory


9. 當要編譯其它的 library(如uClibc) 時,需加上 CFLAG=-nostdinc,讓 arm-elf-gcc 只用 uClibc 本身的 include 而不會去找 newlib 的 include,會相衝的。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()