C ++ Verknüpfung zu Bibliotheken mit Makefile (newbe)

8

Ich versuche zu verstehen, wie man nicht standardisierte Bibliotheken in meinen C ++ - Projekten verwendet. Ich habe ein paar Fragen.

Sagen wir, ich möchte die POCO-Bibliothek benutzen. Also habe ich es heruntergeladen und mit make (statischer Build) erstellt. Jetzt habe ich viele .o-Dateien und .h-Dateien. Es gibt eine Path.h-Datei und eine Path.o-Datei in verschiedenen Verzeichnissen.

Jetzt möchte ich dieses Modul in meinem Code verwenden. Also schließe ich die Datei mit #include "Poco / Path.h" ein. Muss ich Makefile ändern und Path.o zu meinem Ziel hinzufügen?

Was passiert, wenn ich die Standardbibliothek verwende? Sind diese nur in Header-Dateien verfügbar? Ich weiß, dass Vorlagencode nicht vorkompiliert werden kann. Was ist mit dem Rest?

    
Seba 25.10.2010, 13:26
quelle

2 Antworten

10

Neben den Dateien .h und .o werden Sie wahrscheinlich auch eine oder mehrere Dateien libXXX.a und / oder libXXX.so haben. Dies sind die eigentlichen Bibliotheksdateien, mit denen Ihre Anwendung verknüpft werden sollte.

Um die Bibliothek zu verwenden, fügen Sie die relevanten Header in Ihre Quelldatei ein und Sie ändern Ihr Makefile, um dem Linker mitzuteilen, dass er Ihre Anwendung auch mit der XXX-Bibliothek verknüpfen soll. Der typische Linker-Befehl dafür ist -lXXX und der Linker wird sowohl nach libXXX.a als auch nach libXXX.so suchen und den am besten geeigneten verwenden.

Die Standardbibliothek unterscheidet sich nicht wirklich von externen Bibliotheken, außer dass Sie sie nicht explizit für den Linker angeben müssen.

    
Bart van Ingen Schenau 25.10.2010, 13:59
quelle
8

Ihre Frage scheint zu implizieren, dass Sie bereits ein Makefile für Ihren eigenen Code haben. Wenn das der Fall ist, dann sollten Sie die Regel für Ihre ausführbare Datei in diesem Makefile ändern. Wie Bart van Ingen Schenau hervorhebt, hat das POCO-Makefile die Objektdateien wahrscheinlich in Bibliotheken wie Poco/Libraries/libPoco.a zusammengefügt, also sollten Sie sie verwenden, anstatt zu versuchen, die benötigten Objektdateien auszuwählen. Zum Beispiel, wenn Ihre Regel gerade lautet:

%Vor%

Sie sollten es in

ändern %Vor%

(Der zweite Teil Ihrer Frage: "Was passiert ... Was ist mit dem Rest?" ist mir unklar.)

Hinweis: Es ist eine schlechte Idee, #include "Poco/Path.h" . Dies macht Ihren Code abhängig von einer Verzeichnisstruktur, etwas, das es nicht interessieren sollte. Es ist viel besser, #include "Path.h" anzugeben und dem Compiler mitzuteilen, wo es zu finden ist: g++ -c -IPoco ... .

    
Beta 25.10.2010 14:31
quelle