
Ich versuche, mingw32 unter cygwin32 zum Cross-Compilieren zu verwenden. Allerdings erhalte ich einen Fehler mit float.h
In file included from /usr/i686-w64-mingw32/sys-root/mingw/include/winnt.h:16:0,
from /usr/i686-w64-mingw32/sys-root/mingw/include/minwindef.h:146,
from /usr/i686-w64-mingw32/sys-root/mingw/include/windef.h:8,
from /usr/i686-w64-mingw32/sys-root/mingw/include/windows.h:69,
from globals.h:17,
from globals.c:10:
/usr/i686-w64-mingw32/sys-root/mingw/include/float.h:278:57: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant
_CRTIMP double __cdecl __MINGW_NOTHROW _chgsign (double _X);
Ich habe hier einen Artikel mit einem ähnlichen Problem gefunden:
https://www.cygwin.com/ml/cygwin/2003-07/msg00525.html
und sie schlugen vor, die Reihenfolge der Includes zu ändern, sodass mingw float.h vor gcc float.h gefunden wird.
Wenn ich jedoch versuche, den Header manuell wie folgt einzufügen:
i686-w64-mingw32-gcc -DHAVE_CONFIG_H -I /cygdrive/d/Cygwin32/usr/i686-w64-mingw32/sys-root/mingw/include
Wenn ich die ausführliche Option verwende, erhalte ich die Meldung, dass mein Include ignoriert wurde, weil „es sich um ein Nicht-Systemverzeichnis handelt, das ein Systemverzeichnis dupliziert.“
Ich vermute, dass durch den Aufruf von i686-w64-mingw32-gcc dieses Verzeichnis automatisch eingeschlossen wird, sofern ich die Mingw-Bibliotheken und den Quellcode für Cygwin installiert habe, was ich getan habe.
In der ausführlichen Ausgabe des Compilers kann ich das Problem in der Reihenfolge der Includes deutlich erkennen.
/usr/lib/gcc/i686-w64-mingw32/4.8.3/include
/usr/lib/gcc/i686-w64-mingw32/4.8.3/include-fixed
/usr/i686-w64-mingw32/sys-root/mingw/include
Aber wie verschiebe ich das Mingw-Include vor die GCC-Includes?
Antwort1
Habe herausgefunden, dass Sie das GCC-Flag -nostdinc verwenden und dann einfach die Include-Reihenfolgen neu definieren können.
Ich bin nicht sicher, warum ich es bei meinen früheren Google-Suchen nicht gefunden habe.