2013-04-27 12 views
7

Ho un codice che voglio eseguire su una macchina alla quale non ho accesso root. Quella macchina non ha alcune librerie necessarie per eseguire questo codice.C - Compile con dipendenze incluse

C'è un modo per includere tutte le dipendenze quando compilo? Mi rendo conto che il file risultante potrebbe essere abbastanza grande.

risposta

7

Quello che stai cercando è la compilazione statica. Esecuzione di compilazione statica include tutte le librerie in dell'eseguibile stesso, in modo da non devono preoccuparsi tanto di catene di dipendenza su un sistema specifico, distribuzione, ecc

Si può fare questo con:

gcc -Wl,-Bstatic -llib1 -llib2 file.c 

Il -Wl passa i flag seguenti al linker, -Bstatic dice di collegarsi staticamente se possibile, e quindi lib1, lib2, sono le librerie che si intende collegare.

In alternativa, provate:

gcc -static-libgcc -static file.c 

La compilation sarà ancora bisogno di abbinare l'architettura del sistema di non privilegiato. E avete bisogno di avere le librerie statiche installati sul sistema di compilazione (lib.a)

Se compilato correttamente, dovrebbe mostrare "Non una dinamica eseguibile" quando si esegue:

ldd a.out 
+0

Grazie. Confermerò dopo averlo controllato ma penso che sia esattamente quello che cercavo! – Hector

+0

Ok, ora ho questo che sembra strano /usr/bin/ld: impossibile trovare -lgcc_s Tutto quello che ho aggiunto è quello che hai suggerito con -openssl dopo – Hector

+0

Aggiungi anche questi flag: '-static-libgcc' e' -static-libstdC++ '(se si usa C++) –

Problemi correlati