Frage 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 das .o und das .a erstellen? Ich würde auch gerne wissen, wie ich eine statische Bibliothek in anderen CPP-Code kompilieren und verwenden kann. ich habe header.cpp, header.hpp . Ich würde gerne erstellen header.a. Testen Sie die header.a in test.cpp. Ich verwende g ++ zum Kompilieren.


76
2018-05-10 08:10


Ursprung


Antworten:


Erstellen Sie eine O-Datei:

g++ -c header.cpp

Fügen Sie diese Datei zu einer Bibliothek hinzu und erstellen Sie bei Bedarf eine Bibliothek:

ar rvs header.a header.o

Bibliothek benutzen:

g++ main.cpp header.a

84
2018-05-10 08:16



Sie können ein erstellen .a Datei mit dem ar Dienstprogramm, so:

ar crf lib/libHeader.a header.o

lib ist ein Verzeichnis, das alle Ihre Bibliotheken enthält. Es empfiehlt sich, den Code auf diese Weise zu organisieren und den Code und die Objektdateien voneinander zu trennen. Alles in einem Verzeichnis zu haben, sieht im Allgemeinen hässlich aus. Die obige Zeile erstellt libHeader.a im Verzeichnis lib. Also, in Ihrem aktuellen Verzeichnis:

mkdir lib

Dann führe das obige aus ar Befehl.

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

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

Das -L Flagge wird bekommen g++ hinzufügen lib/ Verzeichnis zum Pfad. Diesen Weg, g++ weiß, in welches Verzeichnis gesucht werden soll libHeader. -llibHeader kennzeichnet die spezifische zu verknüpfende Bibliothek.

wo test.o wie folgt erstellt wird:

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

27
2018-05-10 08:17



Kann mir bitte jemand sagen wie es geht   Erstellen Sie eine statische Bibliothek aus einer .cpp   und eine .hpp-Datei? Muss ich erstellen?   die .o und die .a?

Ja.

Erstellen Sie die .o (wie normal):

g++ -c header.cpp

Erstelle das Archiv:

ar rvs header.a header.o

Prüfung:

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

Beachten Sie, dass es sinnlos erscheint, ein Archiv mit nur einem Modul zu erstellen. Du hättest 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!


19
2018-05-10 08:39