Binutils的调整过程和Gcc的调整过程
Binutils的调整过程
要想能调整binutils必须自己编译一个ld命令,ld是个链接器,是整个编译过程中最后一步要执行的命令,要根据库生成程序文件。
以lfs中的为例:
学习啦在线学习网 ../binutils-2.20/configure --prefix=/tools --disable-nls --with-lib-path=/tools/lib
make
make install
学习啦在线学习网 make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin
这个过程会把binutils安装在/tools目录下,并生成一个ld-new放到/tools/bin下。
学习啦在线学习网 这个过程会生成两个ld,ld和ld-new。这两个ld的不同这处在于它们的搜索路径不同。
学习啦在线学习网 ld的搜索路径为/tools/lib,在configure时用--with-lib-path=/tools/lib设置。
ld-newr的搜索路径为/usr/lib:/lib,在重新生成ld时用LIB_PATH=/usr/lib:/lib设置。
这样只要把这两个ld保存好,到时想依赖哪个glibc就用对应ld就行了,不要告诉我你不知道用哪个哟。
Gcc的调整过程
gcc –dumpspecs会输出gcc的现有配制。Sed是个行正则处理工具,把输出的配制中的某些字符串统一替换。
学习啦在线学习网 gcc -dumpspecs | sed \
学习啦在线学习网 -e 's@/lib\(64\)\?/ld@/tools&@g' \
-e "/^\*cpp:$/{n;s,$, -isystem /tools/include,}" \
> $(dirname $($LFS_TGT-gcc -print-libgcc-file-name))/specs
上面的过程大致为gcc输出配制给sed,sed替换后输出到specs文件。
学习啦在线学习网 $(dirname $($LFS_TGT-gcc -print-libgcc-file-name))为specs应该在的路径。