【问题标题】:Can't link Hello World!无法链接 Hello World!
【发布时间】:2015-04-03 02:52:16
【问题描述】:

从一本书(Programming Windows 5th edition)中复制代码的人:

#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

谢谢。

【问题讨论】:

  • “无法编译”不是对问题的有意义的描述。什么是你“不能”?无法启动VS2010?无法创建项目?收到错误消息? 我们应该如何知道做错了什么?
  • 你做了什么来设置你的环境?您正在打印“你好,Windows 98!”的事实。让我担心...您可能正在使用过时的资源。
  • @AndreyT 在我的帖子中有一个错误消息 LNK2001
  • @Lasse Programming Windows 5th 就像我在帖子中指定的那样。
  • 从技术上讲是正确的,你正在编译就好了。但是,您无法链接。编译和链接是不同的步骤。编译错误意味着您的代码有问题。链接错误意味着您正在使用的库有问题。

标签: c++ windows


【解决方案1】:

这取决于您如何设置项目。在 VS2010 中,如果我通过 File->New->Project, Visual C++, Empty Project 创建一个新项目,然后添加一个新的 C++ 文件,并将代码复制进去,它可以编译并运行良好。

如果您创建了不同类型的项目,它可能使用不同的链接库。尝试在解决方案资源管理器中右键单击您的项目,转到属性->链接器->系统,并将子系统设置为“Windows (/SUBSYSTEM:WINDOWS)

Win32 API 很旧,但如果您想进行本地 Windows 编程,大部分情况下都可以完美使用。 Windows 做了大量工作,以确保只要您遵循文档,旧的 API 就不会更改。你仍然可以编译 1992 年的 16 位 Windows 3.1 代码并在 32 位 Windows 7 上运行。

编辑: 也可能是在属性->C/C++->高级中,您将省略默认库名称设置为“是”,您可能希望将其设置为“否”

或者Properties->Linker->Input->Ignore Default Libs应该设置为No.

【讨论】:

  • 我已经按照你的建议设置了,还是不行。
  • @Knowing:你能描述一下你创建一个新项目的过程吗?
  • @Know:您是否尝试过像 Eclipse 建议的那样创建一个新项目?
  • @Eclipse: +1 用于在命名为 Eclipse 时回答这个问题(对于那些没有幽默感的人,是的,我确实觉得这个答案很有用)
  • 我正在通过选择 new->project 并从模板中选择 Win32 项目来创建项目。然后在下一步中我选择空项目。之后,我将添加新的 c++ 文件并粘贴此代码。
【解决方案2】:

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

  • “链接器/系统/子系统”应设置为“Windows (/SUBSYSTEM:WINDOWS)”

当您创建项目并选择 Windows GUI 应用程序模板时,通常会正确设置此设置。不幸的是,如果项目设置为不正确的应用程序类型,则设置有点隐藏(我花了一些时间才找到它)。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 2014-11-29
      相关资源
      最近更新 更多