Depois de tudo que fizemos, agora a brincadeira é de gerar o executável.
Vá na linha de comando e digite:
$ g++ /home/programas/soma_principal.o -I/home/programas -L/home/programas libsoma_function.a -o soma_biblioteca
Pronto, agora você terá um programa que faz uso de uma biblioteca ".a", que está fora do programa principal e que possui a função suma_function, que por sua vez é "linkada" no programa principal quando você declara no início deste programa principal o header "soma_head.h".
Lembrando que nas linhas acima:
- g++ : chamou o compilador;
- /home/programas/soma_principal.o : é caminho onde se encontra o programa principal compilado;
- -I/home/programas: é caminho da pasta onde se encontram os headers .h;
- -L/home/programas: é caminho da pasta onde se encontram os as bibliotecas .a;
- libsoma_function.a: é o nome da biblioteca usada;
- -o soma_biblioteca: indica o nome do executável de saída.
É isso aí.
DETALHES: Se tivéssemos muitos arquivos funções compilados ".o", poderíamos juntá-los numa única biblioteca assim:
$ ar rc libtodas_functions.a function1.o function2.o function3.o function4.o ....
Não esquecer de reindexá-las com:
$ runlib libtodas_functions.a
Então faríamos um "head_todos.h" com o protótipo de todas as funções da biblioteca "libtodas_functions".
Agora então colocaríamos no nosso programa principal o header "head_todos.h" e poderíamos usar as "funções.o" nele contidas.
DETALHE: No programa principal não crie variáveis com o mesmo nome das funções.
Pronto, já sabemos usar um pouco de bibliotecas estáticas no GCC.
Como última dica, em vez de ficarmos chamando o gcc e explicando pra ele onde que está libsoma_fuction.a, os headers e etc, poderíamos gerar um script que faria isso automaticamente. Quanto a gerar scripts, há vários artigos na comunidade.
Como exercício:
1) Crie uma função que multiplica os dois números dados (multiplica_fuction.cpp);
2) Compile-a para obter o "multiplica_fuction.o";
3) Crie a biblioteca libtodas_function.a com o comando:
$ ar rc libtodas_fuction.a soma_function.o multiplica_function.o
4) Faça a reindexação com:
$ ranlib libtodas_function.a
5) Arrume seu arquivo principal colocando o header head_todos.h;
6) Compile seu programa principal;
7) Chame a função "multiplica" dentro do programa principal;
8) Crie o executável.
Espero contribuir.
FAB