MinGW nicht definieren, WIN32-Fehler im Präprozessor-Direktiven
Ich bin mit mingw32-make zum kompilieren eines Projekts für Windows, die hängt an einem Projekt namens libevent2. Ich bekomme immer wieder diese Fehler -
util.h:69:25: fatal error: sys/socket.h: No such file or directory
Offensichtlich eine Datei aus der Linux-API versucht, aufgenommen zu werden, die nicht unter Windows funktionieren. Bei der weiteren Untersuchung finde ich aber, dass diese Datei sollte nur berücksichtigt werden, wenn WIN32 ist nicht definiert.
#ifdef WIN32
#include <winsock2.h>
#else
#include <sys/socket.h>
#endif
- "Dein Projekt"? Sicherzustellen WIN32 definiert ist. '<sys/socket.h>` erfordert, cygwin, nicht nur mingw32.
- Sorry, 'Projekt'. Was meinst du mit 'zu gewährleisten WIN32 definiert ist?'.
- Welche version von MinGW verwenden Sie? Was ist die Kommandozeile aufrufen der compiler?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie verwenden
_WIN32
und können auch prüfen wollen für__CYGWIN__
Sind Sie sicher, dass es nichts undefining
WIN32
? Meine installation von MinGW (4.6.1 an dieser Stelle) definitiv definiert:Versuchen Weitergabe der
-E -dM
Optionen überprüfen, wenn Ihr MinGW-compiler ist (oder nicht), die pre-Bestimmung derWIN32
makro.Beachten Sie, dass streng genommen
WIN32
sollte nicht vordefiniert werden durch den compiler (da es in den Benutzer-Namensraum) - nur_WIN32
sollte.WIN32
sollte das SDK verwendet wird, und/oder durch die build-Umgebung - das ist der Weg, es funktioniert in Microsoft Compilern.Es gibt zum Beispiel die folgende Sequenz in
windef.h
"sowie
/D "WIN32"
ist in Visual Studio C++ - Projekte standardmäßig.Sehen https://stackoverflow.com/a/662543/12711 für mehr details.