无法链接Hello World!

时间:2010-04-27 18:56:03

标签: c++ windows

从书中复制代码的人(编程Windows第5版):

#include <windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0) ;

     return 0 ;
}

Link指向推荐本书的主题。 无法用VS2010编译它。我究竟做错了什么?

Error   1   error LNK2001: unresolved external symbol _WinMainCRTStartup

感谢。

3 个答案:

答案 0 :(得分:5)

这取决于您如何设置项目。在VS2010中,如果我通过File-&gt; New-&gt; Project,Visual C ++,Empty Project创建一个新项目,然后添加一个新的C ++文件,并复制你的代码,它编译并运行就好了。

如果您创建了不同类型的项目,则可能正在使用不同的链接库。尝试在解决方案资源管理器中右键单击项目,转到Properties-&gt; Linker-&gt; System,并将SubSystem设置为“Windows(/ SUBSYSTEM:WINDOWS)

Win32 API已经过时了,但如果你想进行原生Windows编程,那么大部分都是完全可用的。 Windows做了大量工作,以确保只要您遵循文档,旧的API将不会更改。您仍然可以从1992年编译16位Windows 3.1代码并在32位Windows 7上运行它。

编辑: 也可能是在Properties-&gt; C / C ++ - &gt; Advanced中,您将Omit Default Library Name设置为“Yes”,您可能希望将其设置为“No”

或者还有属性 - >链接器 - >输入 - >忽略默认库应该设置为否。

答案 1 :(得分:2)

您需要设置项目的链接器设置以创建Windows GUI程序而不是控制台程序:

  • “Linker / System / SubSystem”应设置为“Windows(/ SUBSYSTEM:WINDOWS)”

通常,在创建项目并选择Windows GUI应用程序模板时,此设置会正确设置。不幸的是,如果项目被设置为不正确的应用程序类型,设置有点埋没(我花了一些时间去寻找它)。

答案 2 :(得分:0)

确保您已将源文件实际添加到项目中。这对我有用。