webentwicklung-frage-antwort-db.com.de

Wie erstelle ich eine statische Bibliothek mit g ++?

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 header.a Erstellen. Testen Sie den Header.a in test.cpp. Ich benutze g ++ zum Kompilieren.

88
linuxx

Erstellen Sie eine .o-Datei:

g++ -c header.cpp

fügen Sie diese Datei einer Bibliothek hinzu und erstellen Sie gegebenenfalls eine Bibliothek:

ar rvs header.a header.o

bibliothek benutzen:

g++ main.cpp header.a
94

Sie können ein .a -Datei mit dem Dienstprogramm ar wie folgt:

ar crf lib/libHeader.a header.o

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 erzeugt libHeader.a im Verzeichnis lib. Gehen Sie in Ihrem aktuellen Verzeichnis wie folgt vor:

mkdir lib

Führen Sie dann den obigen Befehl ar aus.

Wenn Sie alle Bibliotheken verknüpfen, können Sie dies folgendermaßen tun:

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

Das -L Flagge wird g++, um das lib/ Verzeichnis zum Pfad. Diesen Weg, g++ weiß, in welchem ​​Verzeichnis nach libHeader gesucht werden soll. -llibHeader kennzeichnet die zu verlinkende Bibliothek.

wo test.o so erstellt wird:

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

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?

Ja.

Erstelle die .o (wie gewohnt):

g++ -c header.cpp

Archiv erstellen:

ar rvs header.a header.o

Test:

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

Beachten Sie, dass es etwas sinnlos erscheint, ein Archiv mit nur einem Modul zu erstellen. Sie hätten genauso gut schreiben können:

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

Dennoch gebe ich Ihnen den Vorteil, dass Ihr tatsächlicher Anwendungsfall etwas komplexer ist und mehr Module enthält.

Hoffe das hilft!