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? J'aimerais également savoir comment puis-je 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 l'en-tête test.cpp
. J'utilise g ++ pour la compilation.
c++
gcc
compiler-construction
g++
linuxx
la source
la source
Réponses:
Créez un fichier .o:
ajoutez ce fichier à une bibliothèque, en créant une bibliothèque si nécessaire:
utiliser la bibliothèque:
la source
a.out
format, c'est donc très trompeur. Et pourquoi devriez-vous "jamais" créer un exécutable appelétest
?test
s'agit d'une commande système. Mais comme les programmes de test ne sont généralement jamais installés dans le répertoire bin système et vous obligent à écrire,./test
ce n'est pas vraiment un problème pour moi non plus ...a.out
format, mais le nom reste pour des raisons d'héritage. (Et si vous êtes incapable d'utiliser correctement un shell, c'est votre problème; pour ma part, je sais comment exécuter un exécutable à partir du répertoire actuel.test
Est très bien pour un nom d'exécutable, tant que vous écrivez juste un test rapide extrait de code bien sûr.)test
est quelque chose que j'ai appris à regretter et je suis "parfaitement capable d'utiliser un shell". C'est une mauvaise idée, et je l'ai vu en mordre beaucoup d'autres qui sont "parfaitement capables d'utiliser un shell".Vous pouvez créer un
.a
fichier à l'aide de l'ar
utilitaire, comme ceci:lib
est un répertoire qui contient toutes vos bibliothèques. il est recommandé d'organiser votre code de cette façon et de séparer le code et les fichiers objets. Tout avoir dans un seul répertoire semble généralement moche. La ligne ci-dessus créelibHeader.a
dans le répertoirelib
. Donc, dans votre répertoire actuel, faites:Exécutez ensuite la
ar
commande ci-dessus .Lors de la liaison de toutes les bibliothèques, vous pouvez le faire comme ceci:
Le
-L
drapeaug++
ajoutera lelib/
répertoire au chemin. De cette façon,g++
sait quel répertoire rechercher lors de la recherchelibHeader
.-llibHeader
marque la bibliothèque spécifique à lier.où test.o est créé comme ceci:
la source
-lHeader
place de-llibHeader
?Oui.
Créez le .o (comme d'habitude):
Créez l'archive :
Test :
Notez qu'il semble un peu inutile de créer une archive avec un seul module. Vous auriez pu tout aussi bien écrire:
Néanmoins, je vais vous donner l'avantage du doute que votre cas d'utilisation réel est un peu plus complexe, avec plus de modules.
J'espère que cela t'aides!
la source
ranlib
ce que signifie simplement dans GNUar s
.