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應該在的路徑。