web-dev-qa-db-fra.com

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

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

88
linuxx

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
94
Neil Butterworth

Vous pouvez créer un .a fichier à l'aide de l'utilitaire ar, comme suit:

ar crf lib/libHeader.a header.o

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

mkdir lib

Ensuite, exécutez la commande ar ci-dessus.

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

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

Le -L le drapeau obtiendra g++ pour ajouter le lib/ répertoire vers le chemin. Par ici, g++ sait quel répertoire rechercher lorsque libHeader. -llibHeader signale la bibliothèque spécifique à lier.

où test.o est créé comme suit:

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

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

Oui.

Créer le .o (comme d'habitude):

g++ -c header.cpp

Créer l'archive:

ar rvs header.a header.o

Test:

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

Notez qu'il semble un peu inutile de créer une archive avec un seul module. Vous auriez tout aussi bien pu écrire:

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

Néanmoins, je vous laisse le bénéfice du doute que votre cas d'utilisation est un peu plus complexe, avec plus de modules.

J'espère que cela t'aides!