估计编译时间: 9.48 SBU 估计所需硬盘空间: 326 MB |
你必须先打补丁,才能安装这个包。确认在运行下面的命令前,补丁已经解压了。
在第六章前我们不需要C++编译器,所以我们这里只解压 gcc-core 包。
如果你把这个包缺省的优化参数(包括 -march 和 -mcpu参数)改变的话,它会有很不良的表现。最好不要优化这个包。因此,如果你定义了任何优化参数的话,比如CFLAGS 和 CXXFLAGS,我们劝你在编译GCC时unset或修改它们。警告过了哦!
用以下命令安装 GCC:
patch -Np1 -i ../gcc-3.2.patch && patch -Np1 -i ../gcc-3.2-nofixincludes-2.patch && mkdir ../gcc-build && cd ../gcc-build && ../gcc-3.2/configure --prefix=/static \ --disable-nls --disable-shared && echo "#define HAVE_GAS_HIDDEN 1" >> gcc/auto-host.h && make BOOT_LDFLAGS=-static bootstrap && make prefix=$LFS/static install && ln -s gcc $LFS/static/bin/cc |
patch -Np1 -i ../gcc-3.2.patch: 这个补丁修正了一些bug。特别是它包含有"copy fix"和"var fix" ,在 http://www.zipworld.com.au/~gschafer/lfs-tweaks.html 中有详细叙述。
patch -Np1 -i ../gcc-3.2-nofixincludes-2.patch: 这个补丁阻止fixincludes脚本运行。在正常的环境中,安装GCC会运行fixincludes脚本,这个脚本扫描系统,找到需要修改的头文件。比如说它找到了 Glibc 的头文件。它会修改它们,并放在 $LFS/static/lib/gcc-lib/i686-pc-linux-gnu/3.2 目录中。在随后的第六章中,你将安装的 Glibc 会把头文件放在 /usr/include 目录中。接着,你将安装其它要用到 Glibc 头文件的程序。这时,GCC 会先在 /static/lib/gcc-lib 中找头文件,而不是在 /usr/include 目录中,这就会使用你主系统的 Glibc 头文件,而这个头文件可能与你的 LFS 系统中的 Glibc 版本不同,就可能会造成不兼容。
--prefix=/static: 这不是笔误!GCC在编译时对一些路径使用硬编码,所以我们要把/static作为前缀传递给 ./configure. 我们在make install时才传递真正的安装前缀。
echo "#define HAVE_GAS_HIDDEN 1": 这定义了 .hidden 汇编器指令,这样我们后面才不会编译出有错误的 Glibc 。
make BOOT_LDFLAGS=-static: 和我们在编译其它包时使用的 make LDFLAGS=-static 是等效的,都是使程序静态链接。
ln -s gcc $LFS/static/bin/cc: 这个命令创建了 $LFS/static/bin/gcc 的符号连接,以满足有些包的需要。
最后检查于 version 3.1.
c++, c++filt, cc (link to gcc), cc1, cc1plus, collect2, cpp, cpp0, g++, gcc, gccbug, gcov 和 tradcpp0
都是C编译器. 编译器的功能是将文本格式的源代码编译成计算机能够理解的格式。源代码文件编译成目标文件后,目标代码连接器就会根据这个编译器产生的一个或多个目标文件产生一个可执行文件。
C++支持函数重载. 也就是可以把很多函数写作同样一个函数名(每个的参数类型不一样). 所有C++函数名都被编码为低级汇编标识(识别编码). c++filt程序将这些编码解码成用户级的函数名,以至于这些重载函数不会互相冲突.
最后检查于 version 2.95.3.
Bash: sh
Binutils: ar, as, ld, nm, ranlib
Diffutils: cmp
Fileutils: chmod, cp, ln, ls, mkdir, mv, rm, touch
Find: find
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, grep
Make: make
Patch: patch
Sed: sed
Sh-utils: basename, dirname, echo, expr, hostname, sleep, true, uname
Tar: tar
Texinfo: install-info, makeinfo
Textutils: cat, tail, tr