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