编译SFML使用MinGW具有PTITLEBARINFO没有宣布
问题描述:
当我尝试编译使用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)
答
该声明在"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>
...
答
的目标版本不工作的定义。
发生此错误(对我来说),因为一个破碎的包括文件:
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
或执行其他操作。
这看起来像一个肮脏的黑客。为什么不是每个人都有这样的问题。在mingw网站上没有任何解释,也没有错误报告。难道我没有正确安装mingw/cmake吗?或者我正在做一些根本错误的事情? –
我不知道你是否正确安装了MinGW。无论如何这在这里都没有关系。这篇文章解释了错误信息的原因。它不是一个“肮脏的黑客”,它分配目标操作系统。 –