C++ Verlinkung auf Bibliotheken mit makefile (newbe)
Ich versuche zu verstehen, wie die Verwendung von nicht-standard-Bibliotheken in meinem C++ - Projekte.
Ich habe ein paar Fragen.
Können sagen, ich will POCO-Bibliothek. Also ich habe es runtergeladen, und bauen Sie es mit make (statische Version). Jetzt habe ich Haufen .o Dateien und .h-Dateien.
Es ist ein Weg.h-Datei und einen Pfad.o Datei in verschiedenen Verzeichnissen.
Nun möchte ich dieses Modul in meinem code. So habe ich auch die Datei mit #include "Poco/Pfad.h". Muss ich im makefile ändern und Pfad hinzufügen.o zu meinem Ziel ?
Was passiert, wenn ich verwenden Sie die standard-Bibliothek ? Sind diese nur in den header-Dateien ? Ich weiß, dass der template-code kann nicht kompiliert werden. Was ist mit dem rest ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Neben den .h und .o Dateien, werden Sie wahrscheinlich auch eine oder mehrere
libXXX.a
- und/oderlibXXX.so
- Dateien. Dies sind die eigentlichen library-Dateien, die Ihre Anwendung sollte der link gegen.Die Bibliothek zu benutzen, Sie enthalten die entsprechende Header in Ihrem Quellcode-Datei, und ändern Sie Ihre makefile zu sagen, der linker, dass es auch link Ihre Bewerbung an die XXX Bibliothek.
Die typische linker-Befehl dafür ist
-lXXX
und der linker-look für beide libXXX.ein und libXXX.so und je nachdem, was scheint, am besten geeignet ist.Die standard-Bibliothek ist nicht wirklich anders aus externen Bibliotheken, außer dass Sie nicht haben, geben Sie es explizit an den linker.
Deine Frage scheint zu implizieren, dass Sie bereits ein makefile für Ihren eigenen code. Wenn das der Fall ist, dann ja, sollten Sie ändern Sie die Regel für die ausführbare Datei in das makefile. Als Bart van Ingen Schenau Punkte aus, die POCO makefile wahrscheinlich montiert die Objekte, Dateien in Bibliotheken wie
Poco/Libraries/libPoco.a
, so sollten Sie diese verwenden, anstatt zu versuchen, wählen Sie die Objekt-Dateien, die Sie benötigen. Zum Beispiel, wenn jetzt die Regel lautet:sollten Sie es ändern, um
(Den zweiten Teil Ihrer Frage, "Was passiert,... Was ist mit dem rest?" ist mir unklar.)
Hinweis: Es ist eine schlechte Idee zu
#include "Poco/Path.h"
. Das macht Ihren code abhängig von einer Verzeichnis-Struktur, so etwas sollte es nicht kümmern. Es ist viel besser zu#include "Path.h"
und sagen dem compiler, wo es zu finden ist:g++ -c -IPoco ...
.