我能够让tutorial #1编译好。但是我无法编译the 2nd one。
当你做新的时候 - >项目,可能其中一个设置正在干扰?很确定我做了空项目,否则是控制台。
怎么了? 编译错误:
Error 1 error LNK2019: unresolved external symbol _WinMain@16 referenced in function
___tmainCRTStartup C:\...\02-videomode-iterate\MSVCRTD.lib(crtexew.obj) 02-videomode-iterate
Error 2 error LNK1120: 1 unresolved externals C:\...\Debug\02-videomode-iterate.exe 02-videomode-iterate
整个来源:
#include <SFML/Window.hpp>
int main()
{
sf::Window App(sf::VideoMode(800, 600, 32), "SFML-tut: 02");
bool Running = true;
while (Running)
{
App.Display();
}
return EXIT_SUCCESS;
}
项目设置:
包括dir,lib:dir设置正确。
c ++ - &gt;预处理器 - &gt;预处理器定义:
SFML_DYNAMIC
链接器 - &gt;输入
试过:
sfml-window.lib
和sfml-window-d.lib
(visual studio似乎总是在开始时使用调试模式?但是教程#1只在我没有使用-d版本时才有效。
子系统:
/ SUBSYSTEM:WINDOWS
答案 0 :(得分:1)
当您设置/SUBSYSTEM:WINDOWS
标志时,链接器将查找WinMain
函数而不是传统的main
。您有两种选择:
/SUBSYSTEM:CONSOLE
。您将获得一个烦人的(或可能是有用的)控制台窗口,您可以使用FreeConsole
摆脱它。使用以下签名将main
更改为WinMain
:
int CALLBACK WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
);
除非您需要访问argc
和argv
,否则此更改不会造成太大麻烦。
编辑:也许值得一看(从第二个教程中复制):
在Windows操作系统下,您可能已经创建了“Windows” 应用程序“项目,特别是如果不希望控制台出现。 在这种情况下,为避免使用WinMain替换main,您可以链接 SFML_Main静态库并保留标准和可移植的主条目 点。
因此,我认为归结为将sfml-main.lib
(或类似)添加到要链接的库列表中。