2012-05-04 13 views

risposta

1

Il file .a è una libreria, già compilata. Compilate il vostro file .C su un file .o, quindi usate il linker per collegare il vostro file .o con il file .a per produrre un file eseguibile.

+3

Non risponde alla domanda su * come * per farlo. Non dice "come sarà". – mtahmed

14

Per i casi semplici probabilmente si può fare questo:

gcc -o maybe.exe useful.a something.c 

Makefiles per i progetti non banali di solito prima invocare gcc per compilare ogni file .c a un oggetto .o.

gcc -c something.c 

Poi richiamare il linker (in questi giorni spesso utilizzando gcc come wrapper per esso) con un elenco di file .o e .a di collegare in un file eseguibile di uscita.

gcc -o maybe.exe useful.a something.o 

Si noti inoltre che per le biblioteche più installate, è tipico non specificare esplicitamente il file .a ma invece di dire -lhandy che sarebbe l'abbreviazione di "cercare di trovare qualcosa chiamato libhandy.a nel configurato (o specificata con -L) directory di ricerca"

+0

Grazie ad anonimo per intercettare l'errore nella generazione del file oggetto –

4

*.a è una libreria statica e non dinamica (*.dll in finestre e *.so in linux)

gcc -L<here comes the library path> -l<library name> 

ad esempio per il file che avete libname.a nella corrente percorso che si dovrebbe usare:

gcc *.c -L. -lname -o myprogram.o 

dal man (mettere l'uomo gcc nel prompt dei comandi di shell)

Potete mescolare opzioni e altri argomenti. Per la maggior parte, l'ordine che usi non ha importanza. L'ordine conta quando si utilizzano diverse opzioni dello stesso tipo; ad esempio, se si specifica -L più di una volta, le directory vengono cercate nell'ordine specificato. Inoltre, il posizionamento dell'opzione -l è significativo.

+0

Modificato 'gcc -L -l ' da 'gcc -l -l '. Spero che sia quello che intendevi –

+0

Perché usi '-lname' se la libreria è' libname.a'? – this

+0

Leggi http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html – 0x90

Problemi correlati