2014-12-13 64 views
2

如果問題不重要,我很抱歉,但我已經搜索並下載了gcc源代碼,但沒有找到滿意的答案。Libc的名稱和編譯器

那麼,編譯器(gcc/clang/etc ...)如何知道libc的文件名?我知道類Unix系統將它命名爲libc.a,libc.so等......但是,例如,mac os x將它命名爲libSystem。我想這個名字在編譯器的代碼中是硬編碼的,但我還沒有發現任何證據。

+0

結果讓我來告訴你一個非常有用的工具:'grep'。將它應用到gcc源代碼會告訴你,'gcc/config/darwin.h'包含字符串'-lSystem',例如。 – 2014-12-13 11:50:32

回答

1

C庫鏈接標誌在gcc的源代碼中被硬編碼,gp源代碼中的grep -lc-lSystem。在編譯時,對libc的GCC searchs與名libc.so或在其搜索路徑libc.a(加前綴lib和後綴.so.a

下面是grep '\-lc' -r ./gcc/config/ GCC源代碼目錄下的一些結果。

...... 
./gcc/config/i386/sysv5.h: %{!shared:%{!symbolic:-lc -lcrt}}" 

grep '\-lSystem' -r ./gcc/config/

./gcc/config/darwin.h:#define LIB_SPEC "%{!static:-lSystem}"