Alguém pode me dizer como criar uma biblioteca estática de um arquivo .cpp e .hpp? Preciso criar o .o e o .a? Também gostaria de saber como posso compilar uma biblioteca estática e usá-la em outro código .cpp. Sim header.cpp
, header.hpp .
gostaria de criar header.a
. Teste o header.a em test.cpp
. Estou usando o g ++ para compilar.
c++
gcc
compiler-construction
g++
linuxx
fonte
fonte
Respostas:
Crie um arquivo .o:
adicione este arquivo a uma biblioteca, criando uma biblioteca se necessário:
usar biblioteca:
fonte
a.out
formato, então isso é altamente enganoso. E por que você "nunca" deveria criar um executável chamadotest
?test
ser um comando do sistema. Mas desde programas de teste geralmente nunca são instalados no diretório bin sistema e exigem que você escrever./test
não é o problema mais uma para mim também ...a.out
formato, mas o nome permanece por motivos de legado. (E se você for incapaz de usar um shell corretamente, então isso é problema seu;. Eu, pelo menos sabe como executar um executável do diretório atualtest
é muito bem para um nome do arquivo executável, desde que você está escrevendo apenas um teste rápido trecho de curso.)test
é algo do qual aprendi da maneira mais difícil a me arrepender e sou "perfeitamente capaz de usar um shell". É uma má ideia, e eu a vi morder muitos outros que são "perfeitamente capazes de usar uma concha".Você pode criar um
.a
arquivo usando oar
utilitário, assim:lib
é um diretório que contém todas as suas bibliotecas. é uma boa prática organizar seu código dessa maneira e separar o código e os arquivos de objeto. Ter tudo em um diretório geralmente parece feio. A linha acima é criadalibHeader.a
no diretóriolib
. Então, em seu diretório atual, faça:Em seguida, execute o
ar
comando acima .Ao vincular todas as bibliotecas, você pode fazer desta forma:
O
-L
sinalizador irág++
adicionar olib/
diretório ao caminho. Desta forma,g++
sabe qual diretório procurar ao procurarlibHeader
.-llibHeader
sinaliza a biblioteca específica a ser vinculada.onde test.o é criado assim:
fonte
-lHeader
vez de-llibHeader
?Sim.
Crie o .o (conforme normal):
Crie o arquivo :
Teste :
Observe que parece um pouco sem sentido fazer um arquivo com apenas um módulo nele. Você poderia facilmente ter escrito:
Ainda assim, vou lhe dar o benefício da dúvida de que seu caso de uso real é um pouco mais complexo, com mais módulos.
Espero que isto ajude!
fonte
ranlib
que no GNU significa simplesmentear s
.