2
如果問題不重要,我很抱歉,但我已經搜索並下載了gcc源代碼,但沒有找到滿意的答案。Libc的名稱和編譯器
那麼,編譯器(gcc/clang/etc ...)如何知道libc的文件名?我知道類Unix系統將它命名爲libc.a,libc.so等......但是,例如,mac os x將它命名爲libSystem。我想這個名字在編譯器的代碼中是硬編碼的,但我還沒有發現任何證據。
如果問題不重要,我很抱歉,但我已經搜索並下載了gcc源代碼,但沒有找到滿意的答案。Libc的名稱和編譯器
那麼,編譯器(gcc/clang/etc ...)如何知道libc的文件名?我知道類Unix系統將它命名爲libc.a,libc.so等......但是,例如,mac os x將它命名爲libSystem。我想這個名字在編譯器的代碼中是硬編碼的,但我還沒有發現任何證據。
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}"
結果讓我來告訴你一個非常有用的工具:'grep'。將它應用到gcc源代碼會告訴你,'gcc/config/darwin.h'包含字符串'-lSystem',例如。 – 2014-12-13 11:50:32