Wie kann ich einen statischen C-Compiler bekommen?

8

Ich spiele mit Chroot-Umgebungen herum und hätte gerne einen tragbaren C-Compiler, damit ich in jeder Umgebung problemlos einige grundlegende Build-Tools einrichten kann, ohne zu viele Bibliotheken verschieben zu müssen.

Gcc scheint ziemlich aufgebläht für das, was ich tun möchte, aber wenn es einigermaßen einfach ist, ein statisches Gcc zu erstellen, würde es mir nichts ausmachen, ein paar Dutzend Megabyte.

Ich schaue mir auch den Tiny C Compiler an, der kleiner ist, aber dennoch einen beeindruckenden Funktionsumfang aufweist. Wenn Sie jedoch ./configure --help im Quellverzeichnis ausführen, wird keine Option zum statischen Erstellen von tcc aufgeführt, und ich bin mir nicht sicher, wie dies anders erfolgen könnte.

math4tots
quelle
Um Ihr sekundäres Problem, die Speichernutzung, zu beantworten, finden Sie hier einige Lösungen: Sie können Schattenverzeichnisse erstellen, die nur feste Links zu GCC enthalten. Sie können Docker-Container verwenden (Container sind sicherer als Chroot, und Docker bietet ein Union-Dateisystem, mit dem Sie Speicherplatz sparen können).
Strg-Alt-Delor

Antworten:

1

Das Erstellen einer statischen Binärdatei sollte so einfach sein wie das Ausführen von gcc mit -static, oder wenn ld direkt aufgerufen wird, verwenden Sie -Bstatic. Versuchen

CFLAGS=-static make

nach dem Laufen configure. Wenn dies fehlschlägt, sind die Ergebnisse offensichtlich, z. B. Flöße undefinierter Referenzen zur Verbindungszeit.

Kyle Jones
quelle
1
Ich habe es make CFLAGS=-staticgerade versucht . Machen Sie Drucke eine Warnung dlopen, und wenn ich versuche, die ausführbare Datei in der Chroot-Umgebung auszuführen, werden /usr/lib/crt1.o .. crti,o .. crtn.okeine Fehler gefunden. Ist es das, was Sie mit "undefinierten Referenzen zur Linkzeit" gemeint haben?
math4tots
Die Fehler, die ich erwartet hatte, wären auf fehlende statische Versionen von Bibliotheken wie crt1.o zurückzuführen, aber der Linker würde sich sofort beschweren. Wenn Sie die Fehler zur Laufzeit sehen, wurde die Binärdatei nicht statisch verknüpft.
Kyle Jones
Ich denke, Sie haben die Frage falsch verstanden: math4tots möchte einen C-Compiler, der als eigenständige Binärdatei (oder zumindest als leicht identifizierbarer Satz von Dateien) funktioniert, und keinen C-Compiler, der eigenständige Binärdateien erzeugt.
Gilles 'SO - hör auf böse zu sein'
1
Ja ich verstehe das. Das Erstellen eines statisch verknüpften Compilers ist ein notwendiger erster Schritt, über den sich die Frage zu stellen scheint.
Kyle Jones
1
@ Gilles Der beste Weg, einen C-Compiler als eigenständige Binärdatei zu erhalten, besteht darin, ihn mit einem bereits vorhandenen Complier aus dem Quellcode zu erstellen.
OrangeDog
3

Sie können auch eine vorkompilierte Version mit static-get abrufen

static-get -x gcc
Javier López
quelle