2009-08-16 7 views
1

Für mich (ein Anfänger in C) sieht es aus wie ein Programm kann magisch auf externe Bibliotheken zugreifen, indem einfach #include "something.h" an der Spitze einer C-Quelldatei deklariert. Wie wird es gemacht?Verwendung von externen Bibliotheken in einem C-Programm

Ich möchte die POSIX-Bibliothek (unistd.h) verwenden. Ich habe die Header-Datei selbst und ein paar DLLs, aber ich kann sie nicht miteinander verknüpfen und bekomme den Compiler (GCC MinGW), um die DLLs zu finden.

Was ist eine gute Anleitung zum Generieren und Verknüpfen von DLLs, und wie man DLLs mit C-Headern verbindet, und solche Sachen?

Antwort

2

Sie liegen falsch in Ihren Annahmen - die Header-Datei gibt Ihnen keinen magischen Zugriff auf die DLL. Header-Dateien sind keine Bibliotheken, und nur mit der Kopfzeile können Sie die Funktionen, die sie deklariert, nicht aufrufen. In jedem Fall wird MinGW mit unistd.h geliefert - Sie sollten keine zusätzlichen Header oder DLLs benötigen. Beachten Sie jedoch, dass nicht alle POSIX-Funktionen in einer normalen Windows-Umgebung verfügbar sind. Wenn Sie eine POSIX-Umgebung unter Windows verwenden möchten, verwenden Sie Cygwin, nicht MinGW.

1

Die .h-Datei dient nur dazu, Ihr Programm darüber zu informieren, welche Einstiegspunkte beim Compiling-Linking-Prozess verfügbar sein werden.

Ich empfehle Ihnen, überprüfen Sie die Compiler-Dokumentation, um zu wissen, wie Sie die Verknüpfung .dll angeben.

Sie könnten wahrscheinlich mit der Suche nach einem Flag wie -l beginnen, um die .dll anzugeben, die Sie importieren.

0

C ist einfach schrecklich auf diese Weise: Verbinden der richtigen DLLs mit den richtigen .h-Dateien ist ganz bis zum Programmierer. Es gibt eine Menge von Programmier-/Dateisystem-Konventionen, es ist leicht falsch zu gehen, und es ist schwer für Anfänger zu lernen.

Vor einer Weile schrieb ich eine short handout on compiling and linking with Unix libraries. Die Details sind unter Windows nicht identisch, aber ich hoffe, dass die Konzepte nützlich sein können.

+0

Schock! Grusel! Programmierer müssen wissen, was sie tun! Was für eine lächerliche Idee! Aber natürlich stimmt es nicht - MinGW zum Beispiel sorgt dafür, dass die C-Laufzeit-DLL wie alle anderen C-Kompilierungssysteme, die mir begegnet sind, gelinkt wird. Wenn Sie nicht standardmäßige Funktionen verwenden möchten, müssen Sie natürlich die nicht standardmäßigen Bibliotheken verknüpfen. –

+0

@Neil: Richtig. Ich vergesse irgendwie, dass manche Leute Programme schreiben, die nur libc benutzen. Natürlich, jetzt, wo Glibc ein enormes aufgeblähtes Schwein ist, ist das ein vernünftigerer Satz, als es einmal war. –

1

Während Neils und Normans Antworten technisch korrekt sind, erlauben manche Compiler, wie MSVC, einem reinen #Include, sich auf magische Weise mit der richtigen Bibliothek zu verbinden. Dies wird erreicht, indem eine spezielle Richtlinie innerhalb der mitgelieferten .h-Datei, die wie folgt aussieht:

#pragma comment (lib, "Library.lib")

oder

# pragma Kommentar (Linker „/DELAYLOAD:library.dll“)

Der Compiler bettet dann den Kommentar in die erzeugten Objektdateien (.o oder OBJ) und die L Inker extrahiert es und hängt es an seine Optionen an.

Verwandte Themen