2017-09-25 70 views
0

当我尝试编译使用MinGW的SFML-2.4.2库,我得到以下错误:编译SFML使用MinGW具有PTITLEBARINFO没有宣布

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 

我在Windows上运行。我通过MinGW Installation Manager安装了mingw。我使用Cmake-3.9.3来获取makefile等。但是当我在SFML-2.4.2文件夹中运行mingw32-make时,出现此错误。我在C:\ MinGW中安装了MinGW。 (为此,我使用了最新的mingw-get版本0.6.2-beta)

回答

0

该声明在"WinUser.h"中,但未编译,因为MinGW的默认目标仍然是Windows NT 4,没有人使用。您可以通过更改WINVER值(0x0500)设置默认目标到Windows 2000,或将其设置到Windows Vista(0x0600

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

这看起来像一个肮脏的黑客。为什么不是每个人都有这样的问题。在mingw网站上没有任何解释,也没有错误报告。难道我没有正确安装mingw/cmake吗?或者我正在做一些根本错误的事情? –

+0

我不知道你是否正确安装了MinGW。无论如何这在这里都没有关系。这篇文章解释了错误信息的原因。它不是一个“肮脏的黑客”,它分配目标操作系统。 –

0

的目标版本不工作的定义。

发生此错误(对我来说),因为一个破碎的包括文件:

C:\MinGW\include\winuser.h 

在这个文件中,PTITLEBARINFO在行4417 声明,但它是在GetTitleBarInfo声明在行3920所指。

还有一个winuser.h

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

这似乎是正确的。

另外,在Visual-C++winuser.h其位于,例如,在

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

是正确的。

因此,您需要修复损坏的winuser.h,更改您的include-path或执行其他操作。