如果这个问题很简单,我很抱歉,但我一直在搜索gcc源代码并且没有找到满意的答案。
那么,编译器(gcc / clang / etc ...)如何知道libc的文件名?我知道unix-like系统将它命名为libc.a,libc.so等...但是,例如,mac os x将其命名为libSystem。我想这个名字在编译器的代码中是硬编码的,但我还没有找到任何证据。
答案 0 :(得分:1)
C库链接标志在gcc源代码中的gcc,grep -lc
或-lSystem
的源代码中进行了硬编码。在编译时,gcc在其搜索路径中搜索名称为libc.so
或libc.a
的libc(添加前缀lib
和后缀.so
或.a
)
以下是gcc源代码目录下grep '\-lc' -r ./gcc/config/
的一些结果。
......
./gcc/config/i386/sysv5.h: %{!shared:%{!symbolic:-lc -lcrt}}"
grep '\-lSystem' -r ./gcc/config/
./gcc/config/darwin.h:#define LIB_SPEC "%{!static:-lSystem}"