Come posso ottenere un compilatore C statico?


8

Sto giocando con ambienti chroot e mi piacerebbe avere un compilatore C portatile in modo da poter impostare facilmente alcuni strumenti di costruzione di base in ogni ambiente senza dover spostare troppe librerie.

Gcc sembra piuttosto gonfio per quello che voglio fare, ma se è abbastanza facile costruire un gcc statico non mi dispiacerebbe qualche decina di megabyte.

Sto anche guardando il compilatore Tiny C, che è più piccolo ma sembra ancora che abbia un set di funzionalità impressionante. Tuttavia, eseguire ./configure --help nella directory dei sorgenti non elenca alcuna opzione per costruire staticamente tcc, e non sono sicuro di come potrebbe essere fatto diversamente.


Per rispondere a preoccupazioni secondarie, l'utilizzo della memoria, ecco alcune soluzioni: è possibile creare directory shadow che contengono solo collegamenti reali a GCC; Puoi usare i contenitori docker (i contenitori sono più sicuri di chroot e la docker fornisce un filesystem union, che ti permetterà di risparmiare memoria).
ctrl-alt-delor

Risposte:


1

Costruire un binario statico dovrebbe essere semplice come eseguire gcc con -static o se ld viene chiamato direttamente usa -Bstatic. Provare

CFLAGS=-static make

dopo aver corso configure. Se fallisce, i risultati saranno evidenti, ad es. Zattere di riferimenti indefiniti al momento del collegamento.


1
Ci ho provato make CFLAGS=-staticproprio ora. Fai delle stampe un avvertimento dlopen, quindi quando provo a eseguire l'eseguibile nell'ambiente chroot, /usr/lib/crt1.o .. crti,o .. crtn.onon trovo errori. È questo che intendevi con "riferimenti indefiniti al momento del collegamento"?
math4tots,

Gli errori che mi aspettavo sarebbero stati dovuti alla mancanza di versioni statiche delle librerie, come crt1.o, ma il linker si sarebbe lamentato immediatamente. Se visualizzi gli errori in fase di esecuzione, il file binario non era collegato staticamente.
Kyle Jones,

Penso che tu abbia frainteso la domanda: math4tots vuole un compilatore C che funzioni come un binario autonomo (o almeno come un set di file facilmente identificabile) non un compilatore C che produce binari autonomi.
Gilles 'SO- smetti di essere malvagio' il

1
Sì, lo capisco. La produzione di un compilatore collegato staticamente è un primo passo necessario e sembra che la domanda stia ponendo la domanda.
Kyle Jones,

1
@Gilles Il modo migliore per ottenere un compilatore C come binario autonomo è costruirlo dal sorgente usando un complier che hai già.
OrangeDog

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.