C programm soll unter linux und windows laufen

Hallo zusammen,

Ich bin ein Linux anfänger und möchte programme schreiben, die unter linux Suse 8.1
pro(KDevelop) und windows 2000(microsoft visual c++) laufen sollen.ich habe festgestellt dass
die Systembibliotheken in Windows(Microsoft) und Linux(GNU) anderes sind zb stdlib.h unter
Windows enthählt die Deklaration von _MAX_PATH(verwendet in mein Programm). Das Programm
lässt sich unter Linux nicht compilieren weil die _MAX_PATH in GNU C Library stdlib.h nicht
deklariert ist.
wie kann ich das Problem lösen

danke für jede Hilfe und Hinweis.

youssef

Hallo,

zunächst einmal ist zu klären, ob Du C++ oder C programmieren willst. Es gibt da kleine aber feine Unterschiede, so dass ein C++ Compiler C-Code übersetzt, der gar keiner ist und folglich vom GCC abgelehnt wird (es sei denn Du wählst C++).

Wenn Du 100% sicher gehen willst, dann verwende nur ANSI C und Bibliotheken, die auf beiden Systemen vorhanden sind. MAX_PATH hat laut ANSI nichts in der stdlib.h zu suchen, warum Microsoft das da reinpackt, fragst Du am besten dort nach.

Vielleicht will Microsoft das machen, was laut POSIX _POSIX_PATH_MAX bzw. _PC_PATH_PAX in der unistd.h liefern, nämlich die maximal zulässige gesamte Pfadlänge für Dateinamen. Das Makro int PATH_MAX liefert den zugehörigen Wert.

Merke: POSIX ist nicht ANSI und deshalb mit hoher Wahrscheinlichkeit unter Windows unbekannt.

Gruß

Fritze

Ich bin ein Linux anfänger und möchte programme schreiben, die
unter linux Suse 8.1
pro(KDevelop) und windows 2000(microsoft visual c++) laufen
sollen.ich habe festgestellt dass
die Systembibliotheken in Windows(Microsoft) und Linux(GNU)
anderes sind zb stdlib.h unter
Windows enthählt die Deklaration von _MAX_PATH(verwendet in
mein Programm). Das Programm
lässt sich unter Linux nicht compilieren weil die _MAX_PATH
in GNU C Library stdlib.h nicht
deklariert ist.
wie kann ich das Problem lösen

Du koenntest beispielsweise per #define und verschiedenen #ifdef’s das Problem umgehen. Ich denka auch mal, dass du um #ifdef nicht rumkommen wirst. Es ist auch normal, dass man auf verschiedenen Betriebssystemen solche Abfragen mach tund auch entsprechend einen Compilerswitch setzt.

z.B.

#ifdef WINDOWS
#define MAX\_PATH 93
#endif

#ifdef LINUX
#define MAX\_PATH 3000000
#endif

und wenn nichts definiert ist, Fehlermeldung rauswerfen. Aber ein automake erkennt das Betriebssystem und baut entsprechend die Makefiles zusammen.

Und nochwas: Wenn du dich an C++ Standards haelst (bei MS immer etwas kritisch) und nicht immer auf MS eigenen Basteleien rumreitest, sollte es nicht allzu schwer werden.

Li

Wie festgenagelt bist du auf Fuschel C++?

Eine Möglichkeit wäre der Umstieg auf MinGW http://www.mingw.org

/Dirk