C для Mac?

Я работаю над текстом по связыванию и хотел работать вместе с некоторыми примерами в указанном тексте.

Чтобы лучше понять, что происходит, когда я вызываю драйвер gcc, я изучал вручную всю сборку старой школы;

  • предварительная обработка с использованием cpp
  • с cc1
  • сборка с as
  • используя ld

К сожалению, на моем Mac я, похоже, не могу напрямую ссылаться на cc1 (без перечисления cc1 в man). Каковы мои варианты?

Ответ 1

Прочитайте некоторый материал о внутренностях GCC. Сначала википейдж на GCC. Затем вы можете поиграть с датчиком MELT (возможно, вы захотите использовать систему Linux). Затем прочитайте руководство GCC. И GCC ресурсный центр

Используйте gcc -v -Wall для компиляции, он покажет, что работает cc1-Wall всегда полезен). Поэтому попробуйте скомпилировать с помощью gcc -v -Wall hello.c -o helloworld.bin

программа cc1 не в вашем PATH или в /usr/bin/ а -o в моем system- в /usr/lib/gcc/x86_64-linux-gnu/4.8/cc1

Команда gcc -print-prog-name=cc1 скажет вам, какой cc1 используется вашим gcc. Посмотрите варианты отладки GCC для больше.

cc1 обработка теперь внутри 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

фотография с http://starynkevitch.net/Basile/gcc-melt/gcc-MELT-inside.png, сделанная мной, CC BY SA

cc1 создает файл сборки .s; as (запущенный gcc) превращает его в .o. Линкер ld (запущенный gcc) создаст библиотеку или исполняемый файл.

PS. У меня есть система Linux, но на MacOSX все очень похоже.

ссылка на ссылку

Хорошей книгой о линковке является Levine Linkers & loaders book.