Question Comment créer une bibliothèque statique avec g ++?


Quelqu'un peut-il s'il vous plaît me dire comment créer une bibliothèque statique à partir d'un fichier .cpp et .hpp? Dois-je créer le .o et le .a? J'aimerais aussi savoir comment compiler une bibliothèque statique et l'utiliser dans un autre code .cpp. j'ai header.cpp, header.hpp . Je voudrais créer header.a. Testez le header.a dans test.cpp. J'utilise g ++ pour la compilation.


76
2018-05-10 08:10


origine


Réponses:


Créez un fichier .o:

g++ -c header.cpp

Ajoutez ce fichier à une bibliothèque, en créant une bibliothèque si nécessaire:

ar rvs header.a header.o

utiliser la bibliothèque:

g++ main.cpp header.a

84
2018-05-10 08:16



Vous pouvez créer un .a fichier en utilisant le ar utilitaire, comme ça:

ar crf lib/libHeader.a header.o

lib est un répertoire qui contient toutes vos bibliothèques. Il est conseillé d'organiser votre code de cette manière et de séparer le code et les fichiers objets. Avoir tout dans un répertoire semble généralement moche. La ligne ci-dessus crée libHeader.a dans l'annuaire lib. Donc, dans votre répertoire actuel, faites:

mkdir lib

Ensuite, lancez le ci-dessus ar commander.

Lorsque vous liez toutes les bibliothèques, vous pouvez le faire comme suit:

g++ test.o -L./lib -llibHeader -o test  

le -L drapeau obtiendrez g++ ajouter le lib/ répertoire vers le chemin. Par ici, g++ sait quel répertoire rechercher lors de la recherche libHeader. -llibHeader marque la bibliothèque spécifique à lier.

où test.o est créé ainsi:

g++ -c test.cpp -o test.o 

27
2018-05-10 08:17



Quelqu'un peut-il s'il vous plaît me dire comment   créer une bibliothèque statique à partir d'un fichier .cpp   et un fichier .hpp? Dois-je créer   le .o et le .a?

Oui.

Créez le .o (selon la normale):

g++ -c header.cpp

Créer l'archive:

ar rvs header.a header.o

Tester:

g++ test.cpp header.a -o executable_name

Notez qu'il semble inutile de créer une archive avec un seul module. Vous pourriez aussi facilement écrire:

g++ test.cpp header.cpp -o executable_name

Cependant, je vous donne le bénéfice du doute: votre cas d'utilisation réel est un peu plus complexe, avec plus de modules.

J'espère que cela t'aides!


19
2018-05-10 08:39