Имя Libc и компиляторы
Я прошу прощения, если вопрос тривиален, но я гуглил и скачал исходный код gcc тоже, не найдя удовлетворительного ответа.
Итак, как компилятор ( gcc/clang/etc...) знает имя файла libc? Я знаю, что Unix-подобные системы называют это libc.a, libc.so и т. Д. Но, например, Mac OS X называет это libSystem. Я предполагаю, что имя жестко закодировано в коде компилятора, но я пока не нашел доказательств.
1 ответ
Флаг связывания библиотеки C жестко задан в исходном коде gcc, grep -lc
или же -lSystem
в исходном коде gcc. При компиляции gcc ищет libc с именем 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}"