Comment puis-je obtenir un compilateur C statique?

8

Je joue avec des environnements chroot, et j'aimerais avoir un compilateur C portable afin que je puisse facilement configurer des outils de construction de base dans chaque environnement sans avoir à déplacer trop de bibliothèques.

Gcc semble assez lourd pour ce que je veux faire, mais s'il est raisonnablement facile de construire un gcc statique, cela ne me dérangerait pas de quelques dizaines de mégaoctets.

Je regarde également le compilateur Tiny C, qui est plus petit mais semble toujours avoir un ensemble de fonctionnalités impressionnant. Cependant, l'exécution de ./configure --help dans le répertoire source ne répertorie aucune option pour la construction statique de tcc, et je ne sais pas comment cela pourrait être fait autrement.

math4tots
la source
Pour répondre à votre préoccupation secondaire, l'utilisation de la mémoire, voici quelques solutions: Vous pouvez créer des répertoires masqués qui ne contiennent que des liens durs vers GCC; Vous pouvez utiliser des conteneurs docker (les conteneurs sont plus sécurisés que chroot, et docker fournit un système de fichiers union, qui vous permettra d'économiser de la mémoire).
ctrl-alt-delor

Réponses:

1

Construire un binaire statique devrait être aussi simple que d'exécuter gcc avec -static, ou si ld est appelé directement, utilisez -Bstatic. Essayer

CFLAGS=-static make

après avoir couru configure. S'il échoue, les résultats seront évidents, par exemple des radeaux de références non définies au moment de la liaison.

Kyle Jones
la source
1
J'ai essayé make CFLAGS=-statictout à l'heure. Faire des impressions sur certains avertissements dlopen, puis lorsque j'essaie d'exécuter l'exécutable dans l'environnement chroot, je /usr/lib/crt1.o .. crti,o .. crtn.one trouve pas d'erreurs. Est-ce ce que vous entendiez par "références non définies au moment du lien"?
math4tots
Les erreurs que j'attendais seraient dues à des versions statiques manquantes des bibliothèques, comme crt1.o, mais l'éditeur de liens se plaindrait immédiatement. Si vous voyez les erreurs lors de l'exécution, alors le binaire n'était pas lié statiquement.
Kyle Jones
Je pense que vous avez mal compris la question: math4tots veut un compilateur C qui fonctionne comme un binaire autonome (ou au moins comme un ensemble de fichiers facilement identifiables) pas un compilateur C qui produit des binaires autonomes.
Gilles 'SO- arrête d'être méchant'
1
Oui, je comprends ça. La production d'un compilateur lié statiquement est une première étape nécessaire, et une question que la question semble poser.
Kyle Jones
1
@Gilles La meilleure façon d'obtenir un compilateur C en tant que binaire autonome est de le construire à partir des sources en utilisant un compilateur que vous avez déjà.
OrangeDog
3

Vous pouvez également récupérer une version précompilée avec static-get

static-get -x gcc
Javier López
la source