Estou tentando instalar o Ruby no meu diretório pessoal em um servidor Linux (sem acesso root), o que obviamente requer o uso gcc
. A coisa mais próxima que posso encontrar é um diretório com esse nome que (se você for fundo o suficiente) contém 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
O fato de que redirecionamentos CC1 para GCC na Wikipedia parece implicar algo próximo a identidade, no entanto não há nenhuma outra menção de CC1 na página GCC além da nota sobre redirecionamento, e pesquisando não tenha chegado-me qualquer coisa útil, e minhas tentativas para uso cc1
em local de gcc
ter falhado.
Qual é exatamente a relação entre eles? E isso me oferece alguma esperança de compilar Ruby nesta máquina?
cc1
arquivos com#include
e#define
diretivasgcc
é o nome do conjuntocc
é apenas o compilador C desse conjunto.a palavra
cc
também é um nome genérico para qualquer compilador c em sistemas unix, por exemplo, não é raro encontrar uma variável de ambiente chamadaCC
em um script de construção ou script de configuração e, se você quiser ser pedante, essa variável geralmente aponta para ac compilador que não executa necessariamente a vinculação do seu objeto compilado, geralmente é usado para se referir a um compilador que "apenas" compila.cc
fromgcc
é, no entanto, capaz de produzir um executável finalizado, portanto, também é possível executar esta etapa final com seu vinculador.a palavra
cc1
é frequentemente usada "internamente" ou ao ler os documentos GNU ( exemplo ), também é usada para nomear bibliotecas relacionadas ao gcc com base em qual idioma ou compilador a que pertencem (neste caso, cc1 = pertence ao compilador c).de fato, se você perguntar
gcc
qual é o significado da palavracc1
ele deve responder com o caminho da biblioteca para o compilador cc; portanto, você está tentando executar algo que é uma biblioteca e não um executável real.
é muito mais simples lembrar-se do CC como compilador c e simplificar tudo. Ignore esse cc1. Você não precisa saber como as coisas funcionam internamente, a menos que queira iniciar uma longa jornada.
fonte
Como outros mencionaram,
gcc
usacc1
.A exata maneira em que
cc1
e outro sub-programa comocpp
eld
são chamados é feito é determinado pelo arquivos de especificação de formato.O arquivo de especificação atual pode ser visualizado com:
A seção relevante parece ser:
E você pode usar seu próprio arquivo de especificação com:
Obviamente, as opções de linha de comando transmitidas ao GCC alteram indiretamente a forma como os subprocessos são chamados. Mas a manipulação de arquivos de especificação oferece maior flexibilidade e permite que você faça coisas que as opções de linha de comando não podem, por exemplo, /programming/7493620/inhibit-default-library-paths-with-gcc
Você pode observar o que está sendo executado facilmente com:
Saída de amostra:
fonte
cc1
é o pré-processador e o compilador, cuja entrada é código-fonte C e a saída é código de montagem.Você pode ver que
cc1
é um dos comandos invocados (o primeiro, de fato) emitindo (sintaxe dependente da versão):gcc-8 -v SOMESOURCE.c
fonte