J'essaie d'installer Ruby dans mon répertoire personnel sur un serveur Linux (sans accès root), ce qui bien sûr nécessite d'être utilisé gcc
. La chose la plus proche que je peux trouver est un répertoire de ce nom qui (si vous allez assez loin) contient 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
Le fait que CC1 redirige vers GCC sur Wikipédia semble impliquer quelque chose de proche de l'identité, mais il n'y a aucune autre mention de CC1 sur la page GCC à part la note sur la redirection, et Google ne m'a rien donné d'utile, et mes tentatives d'utilisation cc1
dans lieu d' gcc
avoir échoué.
Quelle est exactement la relation entre eux? Et cela me donne-t-il un espoir de compiler Ruby sur cette machine?
cc1
fichiers avec#include
et#define
directivesgcc
est le nom de la suitecc
est juste le compilateur C de cette suite.le mot
cc
c'est aussi un nom générique pour n'importe quel compilateur c donné sous les systèmes unix, par exemple il n'est pas rare de trouver une variable d'environnement appeléeCC
dans un script de construction ou un script de configuration donné, et si vous voulez être pédant, cette variable pointe généralement vers ac compilateur qui n'effectue pas nécessairement la liaison de votre objet compilé, il est généralement utilisé pour faire référence à un compilateur qui compile "juste".cc
fromgcc
est, cependant, capable de produire un exécutable fini et est donc capable d'effectuer cette dernière étape avec son éditeur de liens aussi.le mot
cc1
est souvent utilisé "en interne" ou lors de la lecture de documents GNU ( exemple ), il est également utilisé pour nommer la bibliothèque liée à gcc en fonction du langage ou du compilateur auquel ils appartiennent (dans ce cas, cc1 = appartient au compilateur c).en fait si vous demandez
gcc
quel est le sens du motcc1
il doit répondre avec le chemin de la bibliothèque pour le compilateur cc, donc vous essayez d'exécuter quelque chose qui est une bibliothèque et non un véritable exécutable.
il est beaucoup plus simple de se souvenir de CC en tant que compilateur c et de tout simplifier, contournez ce cc1, vous n'avez pas besoin de savoir comment les choses fonctionnent en interne, sauf si vous voulez commencer un long voyage.
la source
Comme d'autres l'ont mentionné, les
gcc
utilisationscc1
.La façon exacte dont les
cc1
autres sous-programmes commecpp
etld
sont appelés est effectuée est déterminée par le format des fichiers de spécifications .Le fichier de spécifications actuel peut être visualisé avec:
La section pertinente semble être:
Et vous pouvez utiliser votre propre fichier de spécifications avec:
Bien sûr, les options de ligne de commande passées à GCC changent indirectement la façon dont les sous-processus sont appelés. Mais la manipulation des fichiers de spécifications vous donne une plus grande flexibilité et vous permet de faire des choses que les options de ligne de commande ne peuvent pas, par exemple /programming/7493620/inhibit-default-library-paths-with-gcc
Vous pouvez observer ce qui est exécuté facilement avec:
Exemple de sortie:
la source
cc1
est à la fois le préprocesseur et le compilateur, dont l'entrée est le code source C et la sortie est le code assembleur.Vous pouvez voir
cc1
est l'une des commandes invoquées (la première, en fait) en émettant (syntaxe dépendante de la version):gcc-8 -v SOMESOURCE.c
la source