SFML链接器错误:未解析的外部符号_WinMain @ 16,Visual Studio 2012

时间:2012-10-19 10:16:54

标签: c++ linker visual-studio-2012 sfml

我能够让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.libsfml-window-d.lib(visual studio似乎总是在开始时使用调试模式?但是教程#1只在我没有使用-d版本时才有效。

子系统:

  

/ SUBSYSTEM:WINDOWS

1 个答案:

答案 0 :(得分:1)

当您设置/SUBSYSTEM:WINDOWS标志时,链接器将查找WinMain函数而不是传统的main。您有两种选择:

  1. 更改为/SUBSYSTEM:CONSOLE。您将获得一个烦人的(或可能是有用的)控制台窗口,您可以使用FreeConsole摆脱它。
  2. 使用以下签名将main更改为WinMain

    int CALLBACK WinMain(
     HINSTANCE hInstance,
     HINSTANCE hPrevInstance,
     LPSTR lpCmdLine,
     int nCmdShow
    );
    

    除非您需要访问argcargv,否则此更改不会造成太大麻烦。


  3. 编辑:也许值得一看(从第二个教程中复制):

      

    在Windows操作系统下,您可能已经创建了“Windows”   应用程序“项目,特别是如果不希望控制台出现。   在这种情况下,为避免使用WinMain替换main,您可以链接   SFML_Main静态库并保留标准和可移植的主条目   点。

    因此,我认为归结为将sfml-main.lib(或类似)添加到要链接的库列表中。