C компилятор для Mac?
Я работаю над текстом о ссылках и хотел бы поработать с некоторыми примерами в упомянутом тексте.
Чтобы лучше понять, что происходит, когда я призываю gcc
водитель, я пытался сделать всю компиляцию старой школы вручную;
- предварительная обработка с использованием
cpp
- составление с
cc1
- сборка с
as
- связывание с использованием
ld
К сожалению, на моем Mac я не могу ссылаться cc1
напрямую (нет списка cc1
в man
). Какие у меня варианты?
2 ответа
Прочитайте некоторый материал о внутренностях GCC. Сначала википейдж на GCC. Затем вы можете поиграть с MELT-зондом (возможно, вы захотите использовать систему Linux). Затем прочитайте руководство GCC. И GCC ресурсный центр
использование gcc -v -Wall
скомпилировать, покажет что cc1
работает (и -Wall
всегда полезно). Так что попробуйте скомпилировать с gcc -v -Wall hello.c -o helloworld.bin
cc1
программа не сидит в вашем PATH
или в /usr/bin/
но по моей системе /usr/lib/gcc/x86_64-linux-gnu/4.8/cc1
Команда gcc -print-prog-name=cc1
скажу вам, какой cc1
используется вашим gcc
, Посмотрите варианты отладки GCC для больше.
Предварительная обработка теперь внутри cc1
,
gcc
Программа просто драйвер, начиная cc1
(который выполняет большую часть работы по компиляции), затем as
, ld
так далее...
Сайт MELT содержит некоторую документацию и несколько слайдов, объясняющих GCC, которые вы могли бы найти интересными. MELT - это предметно-ориентированный язык для расширения GCC.
Смотрите также рисунок на http://starynkevitch.net/Basile/gcc-melt/cc1-internals.svg и рисунок ниже.
фотография с http://starynkevitch.net/Basile/gcc-melt/gcc-MELT-inside.png, сделанная мной, CC BY SA
cc1
производит .s
сборочный файл; as
(начато gcc
) превращает его в .o
, ld
компоновщик (начатый gcc
) создаст библиотеку или исполняемый файл.
PS. У меня есть система Linux, но на MacOSX все очень похоже.
ссылка на ссылку
Хорошая книга о связывании - это книга Levine's Linkers & loaders.
Для справки, я установил gcc-10 with brew на свою macOS (Catalina).
Хотя он не доступен напрямую (через PATH), его можно найти в
/usr/local/Cellar/gcc/10.2.0/libexec/gcc/x86_64-apple-darwin19/10.2.0
Если ты заблудился, попробуй
gcc -v
и из подробной информации вы можете найти, где ваш
cc1
является.