Vamos ao super-exemplo:
teste.hpp (é o "header", onde há a definição da classe)
class teste {teste.cpp (é onde está a implementação dos métodos da classe)
public:
int mais1(int);
};
#include "teste.hpp"A idéia é transformar isso numa lib para que possa ser reaproveitado. Por exemplo:
int teste::mais1(int n) {
return n+1;
}
#include <iostream>
#include "teste.hpp"
using namespace std;
int main() {
teste t;
cout << t.mais1(21) << endl;
}
Se simplesmente compilar isso com o g++:
$ g++ main.cppAgora criando a lib, a partir do teste.cpp
/tmp/ccgDxT6V.o: In function `main':
main.cpp:(.text+0x64): undefined reference to `teste::mais1(int)'
collect2: ld returned 1 exit status
g++ -fPIC -c teste.cppObserve que o que está em negrito é o que é específico para o nosso teste. o "1.0" é a versão que estamos criando.
g++ -shared -Wl,-soname,libteste.so.1 -o libteste.so.1.0 teste.o
ln -s libteste.so.1.0 libteste.so.1
ln -s libteste.so.1 libteste.so
A primeira linha gera o arquivo "teste.o", que é o código objeto (http://pt.wikipedia.org/wiki/C%C3%B3digo_objeto)
A segunda gera o arquivo da biblioteca, o libteste.so.1.0
Os dois links seriam criados pelo comando "ldconfig", mas como estamos apenas criando um teste, fazemos "na mão" mesmo.
Depois é só compilar:
g++ -L. -lteste main.cppo "-L." indica para buscar libs no diretório atual (deve apontar para onde está o libteste.so)
o "-lteste" indica para o g++ que ele deve incluir a libteste ao compilar.
Funciona, o único detalhe é que temos que levar junto com o executável as bibliotecas...
Fonte: http://www.faqs.org/docs/Linux-HOWTO/GCC-HOWTO.html#AEN643
Nenhum comentário:
Postar um comentário