2017-09-25 14 views
0

Quand je tente de compiler la bibliothèque sfml-2.4.2 avec MinGW je reçois l'erreur suivante:compilation SFML avec MinGW a PTITLEBARINFO pas déclaré

In file included from c:\mingw\include\windows.h:48:0, 
       from C:/Users/LENOVO/programming/SFML/SFML-2.4.1/src/SFML/Window/Win32/JoystickImpl.hpp:42, 
       from C:/Users/LENOVO/programming/SFML/SFML-2.4.1/src/SFML/Window/JoystickImpl.hpp:83, 
       from C:/Users/LENOVO/programming/SFML/SFML-2.4.1/src/SFML/Window/JoystickManager.hpp:32, 
       from C:\Users\LENOVO\programming\SFML\SFML-2.4.1\src\SFML\Window\Joystick.cpp:29: 
c:\mingw\include\winuser.h:3920:47: error: 'PTITLEBARINFO' has not been declared 
WINUSERAPI BOOL WINAPI GetTitleBarInfo (HWND, PTITLEBARINFO); 
               ^~~~~~~~~~~~~ 
src\SFML\Window\CMakeFiles\sfml-window.dir\build.make:137: recipe for target 'src/SFML/Window/CMakeFiles/sfml-window.dir/Joystick.cpp.obj' failed 
mingw32-make[2]: *** [src/SFML/Window/CMakeFiles/sfml-window.dir/Joystick.cpp.obj] Error 1 
CMakeFiles\Makefile2:227: recipe for target 'src/SFML/Window/CMakeFiles/sfml-window.dir/all' failed 
mingw32-make[1]: *** [src/SFML/Window/CMakeFiles/sfml-window.dir/all] Error 2 
Makefile:128: recipe for target 'all' failed 
mingw32-make: *** [all] Error 2 

Je travaille sur les fenêtres. J'ai installé MINGW via le gestionnaire d'installation MinGW. J'ai utilisé Cmake-3.9.3 pour obtenir le makefile etc. Mais quand je cours mingw32-make dans le dossier SFML-2.4.2 j'obtiens cette erreur. J'ai installé MinGW dans C: \ MinGW. (Pour cela j'ai utilisé la version la plus récente de mingw-get 0.6.2-beta)

Répondre

0

La déclaration est là dans "WinUser.h" mais elle n'est pas compilée car la cible par défaut de MinGW est toujours Windows NT 4, que personne n'utilise. Vous pouvez définir la cible par défaut à Windows 2000 en modifiant WINVER valeurs (0x0500), ou réglez-le sur Windows Vista (0x0600)

#define WINVER 0x0500 
#define _WIN32_WINNT 0x0500 
#define _WIN32_WINDOWS 0x0500 
#include <Windows.h> 
... 
+0

Cela ressemble à un hack sale. Pourquoi tout le monde n'a pas un tel problème. Il n'est expliqué nulle part sur le site Web de MINGW et il n'existe aucun rapport de bogue. Se pourrait-il que je n'ai pas réussi à installer mingw/cmake dans le bon sens? Ou que je fais quelque chose de fondamentalement faux? –

+0

Je ne sais pas si vous avez installé MinGW correctement ou non. Ce ne serait pas pertinent ici de toute façon. La cause de votre message d'erreur est expliquée dans le message. Ce n'est pas un "bidouillage", il affecte le système d'exploitation cible. –

0

La définition de la version cible ne fonctionne pas.

Cette erreur se produit (dans mon cas) en raison d'un fichier include cassé:

C:\MinGW\include\winuser.h 

Dans ce fichier, PTITLEBARINFO est déclaré à la ligne 4417 , mais il est fait référence dans la déclaration de GetTitleBarInfo à la ligne 3920.

Il y a un autre winuser.h à

C:\MinGW\msys\1.0\include\w32api\winuser.h 

qui semble être correct .

En outre, le winuser.h dans Visual-C++ qui est situé, par exemple, à

C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winuser.h 

est correcte.

Donc, vous devez réparer le winuser.h cassé, changer votre include-path ou faire quelque chose d'autre.