Criando uma static library
Uma static library pode ter seu código objeto incluído diretamente no código objeto do seu arquivo executável linkado com a static library. Diferente das dlls, cujo código objeto é carregado dinamicamente.
Para um exemplo menos detalhado que o exemplo prático, visite: static libraries
Para criar uma static library, deve ser utilizado o archiver, ao invés do compilador gcc/g++.
Vamos a um exemplo prático:
- Crie dois projetos: libmath e app. (Você pode dar os nomes que quiser).
- Agora, vá para o projeto libmath, crie o arquivo "libmath.h" com o seguinte
conteúdo:
libmath.h
#ifndef LIBMATH_H #define LIBMATH_H namespace libmath { int fatorial( int n ); } #endif
- Agora crie o arquivo "libmath.cpp" com o seguinte conteúdo:
libmath.cpp
#include "libmath.h" namespace libmath { int fatorial( int n ) { if ( n <= 1 ) return 1; return n * fatorial( n-1 ); } }
- Agora crie o arquivo FoxMakefile com o seguinte conteúdo:
FoxMakefile
output.file.name=libmath.a linker.params=-static
O CBuidFile acima especifica o arquivo de saída que, no caso de static libraries, deve começar com "lib" e ter extensão ".a" ou, no windows, pode ter extensão ".lib" ou ".a". A opção -static é necessária para o linker gerar a biblioteca estática.
Seu projeto deve ter agora a seguinte estrutura de arquivos:
libmath ├── FoxMakefile ├── libmath.cpp └── libmath.h
- Feito isto, pode executar o seguinte comando, estando na raiz
do projeto:
foxmake archivebuildall
Esse comando compila todos os arquivos e empacota numa static library.
Agora, deve ter sido criado na pasta "build" o arquivo libmath.a
- Agora vá para o projeto app e copie o arquivo libmath.a para a raiz do projeto.
- Crie também uma pasta chamada "include" e copie para ela o arquivo "libmath.h" do projeto "libmath".
- Depois, crie o arquivo "main.cpp" com o seguinte conteúdo:
main.cpp
#include <libmath.h> #include <iostream> using namespace std; int main() { int num; cout << "Informe um numero: " << std::flush; cin >> num; int fat = libmath::fatorial( num ); cout << endl; cout << "O fatorial de " << num << " eh: " << fat << endl; return 0; }
- Agora crie o FoxMakefile para este projeto com o seguinte conteúdo:
FoxMakefile
output.file.name=app build.files=libmath.a linker.params=-ldl -rdynamic lib.dirs=. include.dirs=include libs=math
As opções -ldl e -rdynamic, são necessárias para linkar bibliotecas dinâmicas no linux. Se estiver no windows, pode excluir essa linha do FoxMakefile.
A propriedade "build.files" serve apenas para copiar a lib "libmath.a" para pasta "build", após o a linkagem do executável.
Seu projeto deve ter agora a seguinte estrutura de arquivos:
app ├── FoxMakefile ├── include │ └── libmath.h ├── libmath.a └── main.cpp
- Feito isso, pode executar o seguinte comando:
foxmake buildall
- Agora navegue até a pasta build e execute o executável de nome
"app", conforme a seguir:
cd build ./app
Você interagirá com o programa conforme a seguir:
Para baixar o projeto "static-library" abordado nessa página, acesse:
Download: static-library.zip.
Próxima aula
O próxima aula ensina como criar uma biblioteca dinâmica para linux ou windows.