2010年06月18日 星期五
todo: 学习 Linux 下编写C语言的基础知识。包括:标准C语言;利用 Linux 下的特定库编译C程序;适合源码编译安装、特定平台的二进制包的安装的编写与制作(如:autoconf的使用、Makefile的编写等等)...
http://www.linuxfromscratch.org/lfs/view/6.6/chapter05/gcc-pass1.html
1、question: 第一遍编译gcc的configure同样使用了--target=$LFS_TGT的交叉编译参数,问:如果不用这个参数有什么后果?
2、question: libmudflap, libssp and libgomp 是做什么用的?
lfs:/mnt/lfs/sources/gcc-build$ time { ../gcc-4.4.3/configure --target=$LFS_TGT --prefix=/tools --disable-nls --disable-shared --disable-multilib --disable-decimal-float --disable-threads --disable-libmudflap --disable-libssp --disable-libgomp --enable-languages=c && make && make install; }
real 9m12.180s
user 9m5.614s
sys 6m55.250s
lfs:~$ ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | \
> sed 's/libgcc/&_eh/'`
`/mnt/lfs/tools/bin/../lib/gcc/i686-lfs-linux-gnu/4.4.3/libgcc_eh.a' -> `libgcc.a'
无论在哪个目录下执行此命令,libgcc_eh.a 都会正确的链接到 libgcc.a 。也就是说,只要指定了链接名称的全路径,只需要链接目标的文件名,则链接名称(Link name)都会链接到同目录的链接目标(Target)。
sed 's/libgcc/&_eh/',这里的&代表前面的libgcc,意思就是说把libgcc替换成libgcc_eh;如在eh/后面加一个g字符,则
表示替换每行中所有的libgcc,否则只替换每行碰到的第一个libgcc 。