如果问题微不足道,我深表歉意,但我也四处搜索并下载了 gcc 源代码,但没有找到满意的答案。
那么,编译器( gcc/clang/etc... )如何知道 libc 的文件名?我知道类似 unix 的系统将其命名为 libc.a、libc.so 等……但是,例如,mac os x 将其命名为 libSystem。我想这个名字在编译器的代码中是硬编码的,但我还没有找到任何证据。
如果问题微不足道,我深表歉意,但我也四处搜索并下载了 gcc 源代码,但没有找到满意的答案。
那么,编译器( gcc/clang/etc... )如何知道 libc 的文件名?我知道类似 unix 的系统将其命名为 libc.a、libc.so 等……但是,例如,mac os x 将其命名为 libSystem。我想这个名字在编译器的代码中是硬编码的,但我还没有找到任何证据。
C 库链接标志在 gcc、grep-lc
或gcc 的源代码中硬编码-lSystem
。在编译时,gcc 使用名称libc.so
或libc.a
在其搜索路径中搜索 libc(添加前缀lib
和后缀.so
or .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}"