Estoy tratando de instalar Ruby en mi directorio de inicio en un servidor Linux (sin acceso de root), que por supuesto requiere usar gcc
. Lo más cercano que puedo encontrar es un directorio con ese nombre que (si profundizas lo suficiente) contiene 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
El hecho de que CC1 redirija a GCC en Wikipedia parece implicar algo cercano a la identidad, sin embargo, no hay otra mención de CC1 en la página de GCC además de la nota sobre la redirección, y Google no me ha dado nada útil, y mis intentos de usar cc1
en lugar de gcc
haber fallado.
¿Cuál es exactamente la relación entre ellos? ¿Y me ofrece alguna esperanza de compilar Ruby en esta máquina?
cc1
#include
#define
gcc
es el nombre de la suitecc
es solo el compilador de C de esta suite.la palabra
cc
también es un nombre genérico para cualquier compilador de c dado bajo sistemas unix, por ejemplo, no es raro encontrar una variable de entorno llamadaCC
en un script de construcción dado o configurar script, y si quieres ser pedante, esta variable generalmente apunta a ac compilador que no necesariamente realiza la vinculación de su objeto compilado, generalmente se usa para referirse a un compilador que "simplemente" compila. Sin embargo,cc
fromgcc
es capaz de generar un ejecutable terminado, por lo que también puede realizar este paso final con su vinculador.la palabra
cc1
a menudo se usa "internamente" o cuando se lee documentos de GNU ( ejemplo ), también se usa para nombrar la biblioteca relacionada con gcc según el idioma o el compilador al que pertenecen (en este caso, cc1 = pertenece al compilador c).de hecho si preguntas
gcc
cuál es el significado de la palabracc1
debería responder con la ruta de la biblioteca para el compilador cc, por lo que está intentando ejecutar algo que sea una biblioteca y no un ejecutable real.
es mucho más simple recordar CC como compilador de c y simplificar todo, omitir este cc1, no necesita saber cómo funcionan las cosas internamente a menos que quiera comenzar un largo viaje.
fuente
Como otros mencionaron, los
gcc
usoscc1
.El formato exacto de los archivos de especificaciones determina la forma exacta en que se llama y se llama a
cc1
otros subprogramas .cpp
ld
El archivo de especificaciones actual se puede ver con:
La sección relevante parece ser:
Y puede usar su propio archivo de especificaciones con:
Por supuesto, las opciones de línea de comando pasadas a GCC cambian indirectamente cómo se llaman los subprocesos. Pero manipular archivos de especificaciones le brinda una mayor flexibilidad y le permite hacer cosas que las opciones de línea de comando no pueden, por ejemplo, /programming/7493620/inhibit-default-library-paths-with-gcc
Puede observar lo que se ejecuta fácilmente con:
Salida de muestra:
fuente
cc1
es tanto el preprocesador como el compilador, cuya entrada es el código fuente C y la salida es el código ensamblador.Puede ver
cc1
uno de los comandos invocados (el primero, de hecho) emitiendo (la sintaxis depende de la versión):gcc-8 -v SOMESOURCE.c
fuente