Frage über .h, .lib

pepsi_gx

Erfahrenes Mitglied
Hallo Forum,

als Newbie für C++ hat mir eine Frage verwirrt.

Im Präprozessor steht manchmal:
C++:
#include <xxx.h>

aber manchmal auch
C++:
#include <xxx.h>
#pragma comment(lib, "xxx.lib")

Wann muss .lib eingebunden werden?

*lg*
 
Moin,

'kurzer' Auszug aus der Hilfe:

Code:
#pragma comment( Kommentartyp[,  Kommentarzeichenfolge] )
 Speichert einen Kommentarsatz in einer Objektdatei oder einer ausführbaren  Datei. Der Kommentartyp ist einer von fünf vordefinierten, weiter unten  beschriebenen Bezeichnern, die den Typ des Kommentarsatzes angeben. Die  optionale Kommentarzeichenfolge ist ein Zeichenfolgenliteral, das  zusätzliche Informationen für einige Kommentartypen bietet. Da es sich hierbei  um ein Zeichenfolgenliteral handelt, werden alle Regeln für  Zeichenfolgenliterale in Bezug auf Escape-Zeichen, eingebettete  Anführungszeichen (") und Verkettung beachtet.
 compiler
 Speichert den Namen und die Versionsnummer des Compilers in der  Objektdatei. Dieser Kommentarsatz wird vom Linker ignoriert. Wenn für diesen  Satztyp der Parameter Kommentarzeichenfolge angegeben wird, dann erzeugt  der Compiler eine Warnung.
 exestr
 Speichert Kommentarzeichenfolge in der Objektdatei. Diese  Zeichenfolge wird zur Bindezeit in der ausführbaren Datei gespeichert. Die  Zeichenfolge wird beim Laden der ausführbaren Datei nicht in den Hauptspeicher  geladen; sie kann jedoch mit einem Programm, das druckbare Zeichenfolgen in  Dateien findet, ermittelt werden. Eine Anwendung für diesen Kommentarsatztyp ist  das Einbetten einer Versionsnummer oder ähnliche Informationen in einer  ausführbaren Datei.
 lib
 Speichert einen Bibliothekssuchsatz in der Objektdatei. Dieser  Kommentartyp muß durch einen Kommentarzeichenfolge-Parameter begleitet  werden, der den Namen (und möglicherweise den Pfad) der Bibliothek enthält, die  der Linker durchsuchen soll. Da der Bibliotheksname den standardmäßigen  Bibliothekssuchsätzen in der Objektdatei vorangestellt ist, sucht der Linker  nach dieser Bibliothek so, als ob diese in der Befehlszeile genannt worden wäre.  Sie können mehrere Bibliothekssuchsätze in einer Quelldatei speichern; jeder  Satz erscheint in der Objektdatei in derselben Reihenfolge, wie sie in der  Quelldatei angetroffen wird.
 linker
 Speichert eine Linkeroption in der Objektdatei. Dieser  Kommentartyp kann dazu verwendet werden, eine Linkeroption anzugeben, anstatt  diese auf der Registerkarte Linker im Dialogfeld  Projekteinstellungen einzustellen. Sie können zum Beispiel die Option  /include angeben, um den Einschluß eines Symbols zu erzwingen:
#pragma comment(linker, "/include:__meinSymbol")
 user
 Speichert einen allgemeinen Kommentar in der Objektdatei. Der  Parameter Kommentarzeichenfolge enthält den Text des Kommentars. Der  Kommentarsatz wird vom Linker ignoriert.
 Das folgende Pragma veranlaßt den Linker, während des Bindens nach der  Bibliothek EMAPI.LIB zu suchen. Der Linker sucht zunächst im aktuellen  Arbeitsverzeichnis und dann im Pfad, der in der Umgebungsvariablen LIB angegeben  ist.
#pragma comment( lib, "emapi" )
 Das folgende Pragma veranlaßt den Compiler, den Namen und die Versionsnummer  des Compilers in der Objektdatei zu speichern:
#pragma comment( compiler )
 Anmerkung   Anstelle von Kommentaren, die den  Parameter Kommentarzeichenfolge haben, kann an jeder Stelle, an der Sie  ein Zeichenfolgenliteral verwenden würden, auch ein Makro verwendet werden,  vorausgesetzt, das Makro wird zu einem Zeichenfolgenliteral expandiert. Sie  können auch jede beliebige Kombination von Zeichenfolgenliteralen und Makros,  die zu Zeichenfolgenliteralen expandieren, miteinander verketten. So ist zum  Beispiel die nachfolgende Anweisung akzeptabel:
#pragma comment( user, "Kompiliert am " __DATE__ " um " __TIME__ )

Gruß
Klaus
 
Hi.

Kurze Antwort: wenn es (laut Dokumentation) notwendig ist.

Falls in der Headerdatei nur inline Funktionen, Präprozessormakros oder Template Definitionen stehen, dann braucht man keine Bibliothek, denn dann sind ja alle notwendigen Informationen vorhanden.

Wenn allerdings Funktionen oder Methoden deklariert werden, muss irgendwann die Definition angegeben werden. Diese befindet sich in der dazugehörigen Bibliothek.

Die Funktionsdefinitionen der C bzw. C++ Standardbibliothek befinden sich natürlich auch in Bibliotheken, die allerdings automatisch eingebunden werden.

Gruß
 
Zurück