2009-06-17 20 views
0

Ich versuche ein C-Programm zu kompilieren, das ich aus dem Internet mit cl.exe in der Befehlszeile in Windows heruntergeladen habe. Diese Datei enthält gnu C-Bibliotheksdateien wie getopt.h und unistd.h, die standardmäßig nicht unter Windows verfügbar sind. Wie kann ich darauf zugreifen (während ich den cl.exe Compiler verwende).Zugriff auf die Gnu C-Bibliothek unter Windows

Danke.

Antwort

3

Die Dateien getopt.h und unistd.h sind Header-Dateien. Es ist besser, einen Gnu-kompatiblen Compiler wie MINGW32 zu verwenden. Da das Ersetzen dieser Dateien im Allgemeinen nicht ausreicht, um Ihre Bibliothek zu kompilieren und unter einem Windows-Compiler laufen zu lassen. Wenn du immer noch cl.exe benutzen willst, dann ersetze "unistd.h" durch "windows.h" und erhalte den win32 kompatiblen "getopt" aus dem Internet.

3

getopt.h und unistd.h sind keine Bibliotheken - sie sind Header-Dateien. Selbst wenn Sie sie hätten, wären sie für Sie nutzlos, da Sie auch die eigentlichen Binärbibliotheken (.LIB oder .a-Dateien) benötigen würden. Die Datei unistd.h, wie der Name schon sagt, enthält Deklarationen von Funktionen, die spezifisch für Unix sind.

+0

Ist dieser Quellcode in einer Windows-Umgebung einfach nicht verwendbar? –

+0

Vielleicht sollten Sie den Link zum Programm – jitter

+3

@Jacob liefern, das es nicht sein könnte. Es gibt normalerweise Workarounds, die Sie anwenden können, wenn Sie von Unix zu Windows gehen, aber diese beinhalten Sie, wenn Sie etwas zusätzlichen Code schreiben. –

3

Für getopt.h können Sie xgetopt verwenden. Wenn Sie Compiler ändern möchten, gibt es immer MingW. Andernfalls müssen Sie wahrscheinlich Ihre eigene getopt.h oder unistd.h schreiben.

0

unistd.h ist standard C include file. Ich wäre schockiert, wenn der Compiler, den Sie verwenden, es nicht bietet. Bist du sicher, dass es nicht da ist?

+1

unistd.h ist keine standardmäßige C-Include-Datei. Ich wäre schockiert, wenn alle Compiler es bereitstellen würden. –

+0

@Neil Butterworth: Der ISO C-Standard ist nicht online verfügbar, aber der POSIX 1003.1-Standard, der damit synchronisiert ist. Ich gab einen Link zum POSIX-Standard, der den erwarteten Inhalt definiert. Wenn das vom C-Standard abweicht, sollte es eine Notation auf der Seite geben - es ist möglich, dass es irrtümlicherweise weggelassen wurde, aber es ist wahrscheinlicher, dass es eine C-Standard-Include-Datei ist und MS hinderlich ist und weggeht es aus. Wo findet man den Prototyp für Dinge wie alarm() und unlink() wenn nicht in unistd.h? – ysth

+0

Es tut uns leid, es ist kein Standard-C-Header. alarm() und unlink() sind keine Standard-C-Funktionen (das Standard-Analog von unlink() ist remove()). Beachten Sie, dass POSIX! = ISO C. –

2

Es gibt immer cygwin - verwenden Sie die Include-Dateien und verknüpfen Sie mit der cygwin1.dll Bibliothek, hier ist ihre FAQ Eintrag auf diesem.

+0

Tun Sie das nur, wenn Sie mit den ziemlich strengen GPL (nicht LGPL) Strikten bei der Verwendung der Cygwin DLL leben können. –

+0

Yeh, ich bin selbst kein großer Fan der GPL, aber wenn du das Ding nicht verkaufst oder anderweitig verteilst - warum nicht? –

+0

@Nikola Einverstanden. Und Cygwin ist eine einfache Lösung, wenn es funktioniert. Aber ich habe es wegen der Lizenzdinge aufgegeben. –

Verwandte Themen