Problem mit ifdef WIN32 (gcc 4.4)

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
BlueShark
Beiträge: 79
Registriert: 28.02.2009, 18:55
Alter Benutzername: BlueShark

Problem mit ifdef WIN32 (gcc 4.4)

Beitrag von BlueShark »

Moin moin,
ich habe ein Problem mit meiner Library, die ich plattformunabhängig programmieren wollte. Folgende Zeilen machen mir dabei Probleme.

Code: Alles auswählen

#ifdef WIN32
     #include "windows.h"
#endif
Nun sagt mir mein Compiler jedes mal:
||=== Util_Lib, Lib Debug ===|
d:\mingw\bin\..\lib\gcc\mingw32\4.4.0\..\..\..\..\include\objbase.h||In function 'BOOL IsEqualGUID(const GUID&, const GUID&)':|
d:\mingw\bin\..\lib\gcc\mingw32\4.4.0\..\..\..\..\include\objbase.h|77|error: 'memcmp' was not declared in this scope|
d:\mingw\bin\..\lib\gcc\mingw32\4.4.0\..\..\..\..\include\objbase.h||In function 'BOOL operator==(const GUID&, const GUID&)':|
d:\mingw\bin\..\lib\gcc\mingw32\4.4.0\..\..\..\..\include\objbase.h|79|error: 'memcmp' was not declared in this scope|
||=== Build finished: 2 errors, 0 warnings ===|
Ich habe nun schon probiert das "WIN32" durch "MSC_VER" oder ein eigenes Makro auszutauschen aber das funktioniert einfach nicht. Ich vermute, dass mein Compiler da Mätzchen macht, weiß aber nicht, wie ich um dieses Problem herumkommen kann. Habt Ihr das selbe schon erlebt? Habt Ihr eine Idee, wie ich das lösen kann?

Danke schonmal im Voraus.

Mfg
BS
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Problem mit ifdef WIN32 (gcc 4.4)

Beitrag von Aramis »

Für mich sieht das einfach so aus, als würde dir die Deklaration von memcmp fehlen. Die ist im Header string.h (cstring) zu finden.
BlueShark
Beiträge: 79
Registriert: 28.02.2009, 18:55
Alter Benutzername: BlueShark

Re: Problem mit ifdef WIN32 (gcc 4.4)

Beitrag von BlueShark »

Aber wo soll ich string.h inkludieren? Ich habe auch schon gelesen, dass ich diese Datei inkludieren muss, aber wo wurde nicht gesagt. Auftreten tut der Fehler in der libgcc um genau zu sein in objbase.h. Am besten einfach mal an einem Beispiel zeigen, wie du das machen würdest.

Mfg
BS
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Problem mit ifdef WIN32 (gcc 4.4)

Beitrag von Aramis »

Probier mal, sie vor allen anderen Headern zu inkludieren. Also einfach über der #include <windows.h> Zeile. Wenn das nicht funktioniert, lass dir mal alle #include's vom Compiler auflisten (g++ hat irgendein Flag dafür).
BlueShark
Beiträge: 79
Registriert: 28.02.2009, 18:55
Alter Benutzername: BlueShark

Re: Problem mit ifdef WIN32 (gcc 4.4)

Beitrag von BlueShark »

Ok, dass mit #include string.h" hat nicht geklappt, jetzt habe ich mir mit -H alle includes ausgeben lassen. Und was mach ich nun?
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Problem mit ifdef WIN32 (gcc 4.4)

Beitrag von kimmi »

Versuch mal _WIN32 statt WIN32.

Gruß Kimmi
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Problem mit ifdef WIN32 (gcc 4.4)

Beitrag von Aramis »

Kimmi hat recht, es sollte in der Tat _WIN32 bzw. _MSC_VER heißen (WIN32 ist zumeist auch definiert). Was ich mit den Includes meinte: einfach mal feststellen, was, ob und in welcher Reihenfolge inkludiert wird. Oder posten.
BlueShark
Beiträge: 79
Registriert: 28.02.2009, 18:55
Alter Benutzername: BlueShark

Re: Problem mit ifdef WIN32 (gcc 4.4)

Beitrag von BlueShark »

Ganz komisch. Ich habe jetzt einfach nochmal alles meine Header Files neu miteinander verlinkt. Jetzt funktioniert es komischerweise auf einmal. Naja, solange es funktioniert bin ich glücklich^^. vielen Dank für die Hilfe.

Mfg
BS
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Problem mit ifdef WIN32 (gcc 4.4)

Beitrag von kimmi »

Klingt nach dem üblichen "Mein Linker haßt mich"-Problem, kenne das :). Da du portablen Code schreiben willst: Ich empfehle, auf _WIN32 umzustellen, da das meines Wissens nach jeder Win32-Compiler unter Windows so deklariert. Der Prefix steht dabei für eine compiler-spezifische Deklaration.

Gruß Kimmi
BlueShark
Beiträge: 79
Registriert: 28.02.2009, 18:55
Alter Benutzername: BlueShark

Re: Problem mit ifdef WIN32 (gcc 4.4)

Beitrag von BlueShark »

Ich habe mir deinen Rat auch zu Herzen genommen und das dementsprechend übernommen. Ich merke vor allem gerade, wie wichtig es ist mehrere Compiler zu benutzen(verwende gcc 4.4 und den Microsoft Compiler), mein persönlicher Favorit ist jedoch gcc, da ich dort viel mehr Warnungen und Fehler um die Ohren gepfeffert bekomme als beim Microsoft Compiler, in diesem Sinne schreibt man auch besseren Code.

Mfg
BS
Benutzeravatar
Schrompf
Moderator
Beiträge: 4855
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Problem mit ifdef WIN32 (gcc 4.4)

Beitrag von Schrompf »

Der VC++-Compiler enthält Dir viele Warnungen vor, solange Du die Standard-Warnungsstufe beibehälst. Mit Stufe 4 bekommt man dann sehr viel mehr Warnungen - teilweise absurd, teilweise Zeugs, bei dem man sich fragt, warum man das bisher nicht gesagt bekommen hat. Probier's mal aus, aber bereite Dich auf eine wahre Flut von Warnungen vor - vor allem, wenn Du Fremdbibliotheken einsetzt.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Antworten