Domanda
Sono un piccolo problema: devo aprire un file linker che ha estensione .a
. Io uso Dev-C ++.
Soluzione
I file sono archivi .a
ar
(qualcosa come archivi zip) del file oggetto (.o
). È possibile elencare i file nel file di .a
utilizzando il programma ar
:
ar t file.a
e estrarre tutti i file:
ar x file.a
Altri suggerimenti
I file con estensione .a
sono librerie statiche utilizzando un file Unix convenzioni di denominazione. Non sono molto di più di una raccolta indicizzata di codice oggetto. Non è tanto aprirli (a meno che non hai uno strumento come nm
o gdb
disponibili, entrambi i quali possono fare le cose sensibili con una libreria, se non necessariamente quello che si potrebbe desiderare), come dire la linker usarli durante il collegamento. Con la maggior parte linker, è importante mettere tutte le librerie (sia statico che dinamico / comune) dopo il codice del programma principale sulla riga di comando del linker e l'ordine di librerie questioni troppo.
Vuoi davvero dire che si desidera Apri il file, o meglio che si desidera collegamento con il vostro codice?
Dev-C ++ per default viene installato con il compilatore MinGW / GCC. Se l'archivio non è specificamente costruito per funzionare con MinGW (ad esempio può essere un archivio di Cygwin o Linux), non sarà in grado di collegarlo al MinGW codice generato.
Se l'archivio è una libreria compatibile con MinGW / GCC, allora è sufficiente collegarlo al vostro codice. In Dev-C ++ è necessario aggiungere l'archivio alle opzioni del progetto linker, o aggiungendo il percorso completo dell'archivio (c'è un pulsante per che nelle opzioni di progetto), o mettendo l'archivio in un percorso definito da un'opzione -L<path>
, e quindi l'aggiunta di un'opzione -l<archive>
. Si noti che id l'archivio si chiama libXXX.a, allora l'opzione -l<archive>
sarà `-lXXX '; il prefisso "lib" e ".a" estensione sono implicite.
Se si vuole semplicemente esaminare un archivio per determinare quali simboli esterni che fornisce, quindi il nm utilità può essere usato per questo. Se si desidera estrarre i file oggetto singoli, quindi utilizzare il ar , anche se non riesco a pensare a una buona ragione per cui ci si vuole fare neanche.
fstream , o fstream file_op("c:\\test.a",ios::in);
, e non dimenticate di includere fstream.h
.