Kann mir bitte jemand sagen, wie man eine statische Bibliothek aus einer CPP- und einer HPP-Datei erstellt? Muss ich die .o und die .a erstellen? Ich möchte auch wissen, wie ich eine statische Bibliothek kompilieren und in anderem CPP-Code verwenden kann. Ich habe header.cpp
, header.hpp .
ich möchte erstellen header.a
. Testen Sie den Header.a in test.cpp
. Ich benutze g ++ zum Kompilieren.
c++
gcc
compiler-construction
g++
LinuxX
quelle
quelle
Antworten:
Erstellen Sie eine O-Datei:
Fügen Sie diese Datei einer Bibliothek hinzu und erstellen Sie gegebenenfalls eine Bibliothek:
Bibliothek benutzen:
quelle
a.out
Format , so dass dies sehr irreführend ist. Und warum sollten Sie "nie" eine ausführbare Datei namens erstellentest
?test
es sich um einen Systembefehl handelt. Aber da Testprogramme normalerweise nie im System-Bin-Verzeichnis installiert sind und Sie schreiben müssen./test
, ist dies auch für mich kein so großes Problem ...a.out
Format erstellt, der Name bleibt jedoch aus alten Gründen erhalten. (Und wenn Sie nicht in der Lage sind, eine Shell richtig zu verwenden, dann ist das Ihr Problem. Ich weiß, wie man eine ausführbare Datei aus dem aktuellen Verzeichnis ausführt. Für einen ausführbaren Namentest
ist das in Ordnung , solange Sie nur einen kurzen Test schreiben Ausschnitt natürlich.)test
ist etwas, das ich schwer zu bereuen gelernt habe und das "perfekt in der Lage ist, eine Shell zu verwenden". Es ist eine schlechte Idee, und ich habe gesehen, dass sie viele andere beißt, die "perfekt in der Lage sind, eine Muschel zu benutzen".Sie können eine
.a
Datei mit demar
Dienstprogramm wie folgt erstellen :lib
ist ein Verzeichnis, das alle Ihre Bibliotheken enthält. Es wird empfohlen, den Code auf diese Weise zu organisieren und den Code und die Objektdateien zu trennen. Alles in einem Verzeichnis zu haben, sieht im Allgemeinen hässlich aus. Die obige Zeile wirdlibHeader.a
im Verzeichnis erstelltlib
. Führen Sie in Ihrem aktuellen Verzeichnis folgende Schritte aus:Führen Sie dann den obigen
ar
Befehl aus.Wenn Sie alle Bibliotheken verknüpfen, können Sie dies folgendermaßen tun:
Das
-L
Flag kanng++
daslib/
Verzeichnis zum Pfad hinzufügen . Auf diese Weiseg++
wissen Sie, nach welchem Verzeichnis Sie suchen müssenlibHeader
.-llibHeader
kennzeichnet die zu verknüpfende Bibliothek.wo test.o so erstellt wird:
quelle
-lHeader
stattdessen-llibHeader
?Ja.
Erstellen Sie die .o (wie gewohnt ):
Erstellen Sie das Archiv :
Test :
Beachten Sie, dass es etwas sinnlos erscheint, ein Archiv mit nur einem Modul zu erstellen. Sie hätten genauso gut schreiben können:
Trotzdem gebe ich Ihnen den Vorteil des Zweifels, dass Ihr tatsächlicher Anwendungsfall mit mehr Modulen etwas komplexer ist.
Hoffe das hilft!
quelle
ranlib
was in GNU einfach bedeutetar s
.