Я пытаюсь установить Ruby в своем домашнем каталоге на сервере Linux (без корневого доступа), который, конечно, требует использования gcc
. Самая близкая вещь, которую я могу найти, - это каталог с таким именем, который (если вы углубитесь в это) содержит cc1
:
>: find / -iname gcc 2> /dev/null
/usr/libexec/gcc
>: tree -if /usr/libexec/gcc
/usr/libexec/gcc
/usr/libexec/gcc/x86_64-redhat-linux
/usr/libexec/gcc/x86_64-redhat-linux/4.1.1
/usr/libexec/gcc/x86_64-redhat-linux/4.1.1/cc1
/usr/libexec/gcc/x86_64-redhat-linux/4.1.2 -> 4.1.1
Тот факт, что CC1 перенаправляет на GCC в Википедии, кажется, подразумевает нечто близкое к идентичности, однако на странице GCC нет иного упоминания о CC1, кроме заметки о перенаправлении, и Googling не принес мне ничего полезного, и мои попытки использовать cc1
в место gcc
провалилось.
Какие именно отношения между ними? И дает ли это мне надежду на компиляцию Ruby на этой машине?
cc1
файлы#include
и#define
директивыgcc
это имя набораcc
просто компилятор C из этого набора.Слово
cc
это также общее имя для любого данного компилятора c в системах Unix, например, нередко найти переменную окружения, вызываемуюCC
в данном сценарии сборки или скрипте конфигурации, и если вы хотите быть педантичным, эта переменная обычно указывает на переменную компилятор, который не обязательно выполняет компоновку вашего скомпилированного объекта, он обычно используется для ссылки на компилятор, который «просто» компилируется.cc
Однако fromgcc
может выводить готовый исполняемый файл, поэтому может выполнить этот последний шаг и со своим компоновщиком.Слово,
cc1
которое часто используется «внутренне» или при чтении документации GNU ( пример ), также используется для именования библиотеки, связанной с gcc, в зависимости от того, к какому языку или компилятору они принадлежат (в данном случае cc1 = принадлежит компилятору c).на самом деле, если вы спросите,
gcc
что означает словоcc1
он должен дать путь к библиотеке для компилятора cc, поэтому вы пытаетесь выполнить что-то, что является библиотекой, а не реальным исполняемым файлом.
гораздо проще запомнить CC как c-компилятор и упростить все, обходя этот cc1, вам не нужно знать, как все работает внутри, если вы не хотите начать долгое путешествие.
источник
Как уже упоминалось,
gcc
используетcc1
.Точный способ , в котором
cc1
и другой подпрограмме , какcpp
иld
называется делаются определяются спецификация файлов формат.Текущий файл спецификации можно просмотреть с помощью:
Соответствующий раздел выглядит так:
И вы можете использовать свой собственный файл спецификации с:
Конечно, параметры командной строки, передаваемые в GCC, косвенно изменяют способ вызова подпроцессов. Но манипулирование файлами спецификаций дает вам большую гибкость и позволяет вам делать вещи, которые недоступны для параметров командной строки, например, /programming/7493620/inhibit-default-library-paths-with-gcc
Вы можете легко наблюдать за тем, что запускается:
Образец вывода:
источник
cc1
это и препроцессор, и компилятор, чьи входные данные - это исходный код на C, а выходные - код сборки.Вы можете видеть,
cc1
что одна из команд, вызываемых (фактически, первой), выдает (синтаксис зависит от версии):gcc-8 -v SOMESOURCE.c
источник