Binutils的調(diào)整過(guò)程和Gcc的調(diào)整過(guò)程
Binutils的調(diào)整過(guò)程
要想能調(diào)整binutils必須自己編譯一個(gè)ld命令,ld是個(gè)鏈接器,是整個(gè)編譯過(guò)程中最后一步要執(zhí)行的命令,要根據(jù)庫(kù)生成程序文件。
以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
這個(gè)過(guò)程會(huì)把binutils安裝在/tools目錄下,并生成一個(gè)ld-new放到/tools/bin下。
這個(gè)過(guò)程會(huì)生成兩個(gè)ld,ld和ld-new。這兩個(gè)ld的不同這處在于它們的搜索路徑不同。
ld的搜索路徑為/tools/lib,在configure時(shí)用--with-lib-path=/tools/lib設(shè)置。
ld-newr的搜索路徑為/usr/lib:/lib,在重新生成ld時(shí)用LIB_PATH=/usr/lib:/lib設(shè)置。
這樣只要把這兩個(gè)ld保存好,到時(shí)想依賴哪個(gè)glibc就用對(duì)應(yīng)ld就行了,不要告訴我你不知道用哪個(gè)喲。
Gcc的調(diào)整過(guò)程
gcc –dumpspecs會(huì)輸出gcc的現(xiàn)有配制。Sed是個(gè)行正則處理工具,把輸出的配制中的某些字符串統(tǒng)一替換。
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
上面的過(guò)程大致為gcc輸出配制給sed,sed替換后輸出到specs文件。
$(dirname $($LFS_TGT-gcc -print-libgcc-file-name))為specs應(yīng)該在的路徑。