Come creare le librerie statiche in C++
In un programma C++ posso richiamare librerie statiche tramite l'istruzione #include seguita dal nome del file della libreria.
Un esempio pratico
1] Scrivo il codice sorgente
Scrivo il sorgente di un programma chiamato "prova.cpp".
- #include "libreria.h"
- int main() {
- foo();
- return 1;
- }
Il programma richiama il file libreria.h che contiene le funzioni della libreria statica esterna.
- void foo();
Nel file libreria.h c'è soltanto la dichiarazione di funzione.
Sto semplicemente dicendo al compilatore che esiste una funzione chiamata foo senza scrivere cosa fa.
L'implementazione vera e propria della funzione foo() la digito in un altro file sorgente chiamato libreria.cpp
- #include "alib.h"
- #include <iostream>
- void foo()
- {
- std::cout << "Hello from foo()\n" << std::endl;
- }
Nel codice sorgente di libreria.cpp manca la chiave main() perché si tratta di una libreria e, a differenza dei programmi, le librerie non hanno un punto di ingresso. Contengono soltanto un elenco di funzioni.
Ricapitolando ho creato tre file sorgenti
2] Compilo la libreria statica
A questo punto compilo la libreria statica con il compilatore g++ su Linux.
g++ -c libreria.cpp
Il compilatore crea un oggetto libreria.o che contiene il codice oggetto.
3] Creo un archivio con tutte le librerie statiche
Poi creo un file archivio.a in cui salvare tutti le librerie oggetto usate dal programma.
In questo caso è una sola (libreria.o).
ar rvs libarchivio.a libreria.o
Da notare che il prefisso lib davanti al nome dell'archivio.o è una convenzione del compilatore G++.
4] Compilo il programma indicando la libreria statica
Una volta creato l'archivio con le librerie oggetto, posso compilare il programma prova.cpp passandogli la libreria archivio
g++ -o prova prova.cpp -L. -l archivio
Il compilatore crea un file eseguibile prova nella stessa directory.
A questo punto eseguo il file eseguibile per verificare che tutto funzioni.
./prova
L'output del programma è
Hello World
E così via.