1

我能够得到教程#1来编译。但是我无法编译第二个。

当您执行 new -> Project 时,可能其中一个设置会干扰?很确定我做了空项目,否则控制台。

怎么了?编译错误:

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;
}

项目设置:

include dir, lib: dir 设置正确。

c++ -> 预处理器 -> 预处理器定义:

SFML_DYNAMIC

链接器->输入

尝试过:sfml-window.libsfml-window-d.lib(Visual Studio 似乎总是在开始时使用调试模式?但教程 #1 仅在我不使用 -d 版本时才有效。

子系统:

/子系统:WINDOWS

4

1 回答 1

1

当您设置/SUBSYSTEM:WINDOWS标志时,链接器将寻找一个WinMain函数而不是传统的main. 你有两个选择:

  1. 更改为/SUBSYSTEM:CONSOLE。你会得到一个烦人的(或者可能有用的)控制台窗口,你可以用FreeConsole.
  2. 更改mainWinMain以下签名:

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

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


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

在 Windows 操作系统下,您可能已经创建了一个“Windows 应用程序”项目,尤其是在不希望控制台显示的情况下。在这种情况下,为避免将 main 替换为 WinMain,您可以与 SFML_Main 静态库链接,并保留一个标准且可移植的 main 入口点。

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

于 2012-10-19T10:21:55.673 回答