編譯gcc時關於工具鏈的調整

2021-06-06 03:01:36 字數 949 閱讀 7944

specs=`dirname $(gcc -print-libgcc-file-name)`/specs

gcc -dumpspecs | sed \

-e 's@/lib\(64\)\?/ld@/tools&@g' \

-e "/^\*cpp:$/" > $specs

echo "new specs file is: $specs"

unset specs

再設定成預設值

gcc -dumpspecs | sed -e 's@/tools@@g' \

-e '/\*startfile_prefix_spec:/' \

-e '/\*cpp:/' > \

`dirname $(gcc --print-libgcc-file-name)`/specs

驗證gcc 工作是否正常

echo "int main(){}" > dummy.c

gcc -v -wl,--verbose &>dummy.log dummy.c

驗證dynamic linker

readelf -l a.out | grep ': /lib'

驗證 startfiles

grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log

驗證 search header files

grep -b2 '^ /usr/include' dummy.log

驗證 search libraries path

grep 'search.*/usr/lib' dummy.log | sed 's|; |\n|g'

驗證 correct libc

grep "/lib.*/libc.so.6 " dummy.log

驗證 使用 correct dynamic linker

grep "found" dummy.log

GCC編譯工具鏈

編譯過程控制 e 預處理,會呼叫cpp預處理器,但不生成檔案。gcc e main.c o main.i c 預處理時,不刪除注釋資訊 s 生成彙編檔案,gcc合併預編譯和編譯,呼叫ccl程式完成 c 將原始檔編譯成目標檔案,但是不鏈結,呼叫彙編器as o 輸出目標名稱,gcc預設編譯出來的檔案是a...

GCC 編譯命令GUN工具鏈的使用

binutils原始碼工具包中的常用命令 gcc g ld ldd nm strings readelf addr2line strip objcopy as ar gdb 1 gcc g 編譯器 示例 gcc c test.c gcc o test test.c gcc e o test.i te...

GCC 的編譯過程及編譯工具

nasm的安裝與使用 總結本文講解了gcc的編譯過程,預處理 編譯 彙編和連線。還有編譯工具nasm的使用。include intmain void 預處理語句 gcc e hello.c o hello.ihello.i檔案內容 gcc s hello.i o hello.shello.s檔案內容...