【问题标题】:LINK : fatal error LNK1561: entry point must be defined ERROR IN VC++LINK : 致命错误 LNK1561: 必须定义入口点 错误在 VC++
【发布时间】:2013-06-08 20:28:00
【问题描述】:

我第一次安装了 MS VS VC++,以便开始使用 GLFW 库编写 OpenGL。我按照http://shawndeprey.blogspot.com/2012/02/setting-up-glfw-in-visual-studio-2010.html 的安装说明进行操作 然后我写了这个简单的程序,只是为了测试它,它确实在 Eclipse 上工作:

#include <stdlib.h>
#include <GL/glfw.h>

using namespace std;

int main()
{
    int running = GL_TRUE;
    if (!glfwInit()) {
        exit(EXIT_FAILURE);
    }

    if (!glfwOpenWindow(300, 300, 0, 0, 0, 0, 0, 0, GLFW_WINDOW)) {
        glfwTerminate();
        exit(EXIT_FAILURE);
    }

    while (running) {
        // glClear( GL_COLOR_BUFFER_BIT );
        glfwSwapBuffers();
        running = !glfwGetKey(GLFW_KEY_ESC) && glfwGetWindowParam(GLFW_OPENED);
    }

    glfwTerminate();
    exit(EXIT_SUCCESS);
    return 0;
}

但后来我得到了这个可怕的错误:

------ Build started: Project: first1, Configuration: Debug Win32 ------
   LINK : fatal error LNK1561: entry point must be defined
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

我知道,我在互联网上四处查看,我发现的唯一解决方案是“它需要 main() 函数才能工作”。我显然有它,就在那里,但它仍然给我同样的致命错误:(

如果能得到有关如何修复它的回复,那就太好了。安装过程中可能有我的缺陷或其他什么。

【问题讨论】:

  • 只是因为这个网站,我不得不更改它们|:'它们是:#include 和:#include
  • 如果您将代码标记为code,每行缩进四个空格,上下各空一行(或单击突出显示代码的{} 按钮),井号将得到妥善处理。
  • 这个 cpp 文件是你的 MS 项目的一部分吗?如果你右键单击它,它会说“Build Action | Compile”吗?
  • 是的,它编译成功,但是当我尝试调试它时,它会抛出致命错误。
  • 它编译,但不链接,因此你不能运行你的应用程序来开始调试它。

标签: c++ visual-studio visual-c++


【解决方案1】:

这是控制台程序项目还是 Windows 项目?我问是因为对于 Win32 和类似项目,入口点是 WinMain()

  1. 右键单击左侧的项目(不是解决方案)。
  2. 然后点击属性->配置属性->链接器->系统

如果它显示Subsystem Windows,您的入口点应该是 WinMain(),即

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd)
{
   your code here ...
}

另外,说到 cmets。这是编译(或更准确地说是链接)错误,而不是运行时错误。当你开始调试时,编译器需要制作一个完整的程序(不仅仅是编译你的模块),这就是错误发生的时候。

它甚至没有达到加载和运行的目的。

【讨论】:

  • 右键单击项目(不是最顶部的解决方案条目),然后单击配置属性...
  • 现在我到了 SubSystem 应该说“windows”的地步……它什么也没说。空槽。
  • 该属性页面中最顶部的条目。不知道那里是不是windows(也可能是console),但是如果是windows,那么你的main函数需要重命名。
  • 我有VS2005,你的可能不一样。或者它甚至可能是错误的另一个原因。
  • 这是不准确的。虽然它有时似乎有效,但它会以微妙的方式失败。如果您使用的是 CRT,则用户提供的入口点不是进程入口。您需要设置 CRT 的入口点,因为它执行必要的初始化(例如运行静态初始化程序)。当使用微软的编译器(和 CRT)时,entry point 应该是WinMainCRTStartup(或wWinMainCRTStartup)。
【解决方案2】:

它无法找到您的程序的入口点,在本例中为 main()。您的链接器设置可能不正确。

this post here

【讨论】:

    【解决方案3】:

    将其更改为控制台 (/SUBSYSTEM:CONSOLE) 即可使用

    【讨论】:

    • cl:命令行警告 D9002:忽略未知选项 '/SUBSYSTEM:CONSOLE'
    • 注意:标志应该传递给链接器,而不是编译器。 cl 是编译器。因此,如果您使用cl 构建exe,请使用/link 标志。另见social.msdn.microsoft.com/Forums/en-US/…
    【解决方案4】:

    在我更改文件的行结尾后,我在 VS 上发生了这种情况。将它们改回 Windows CR LF 解决了这个问题。

    【讨论】:

      【解决方案5】:

      在 Visual Studio 中: 属性-&gt;高级-&gt;入口点-&gt;只写你希望程序开始运行的函数的名称,区分大小写,不带任何括号和命令行参数。

      【讨论】:

      • 顺便说一句,前几天在一次演讲中听说不建议将除'main'之外的其他函数作为入口函数。
      【解决方案6】:

      就我而言,程序运行良好,但一天后,我什么也没做就遇到了这个问题......

      解决方案是手动添加“Main”作为入口点(在编辑之前,该区域是空的):

      【讨论】:

        【解决方案7】:

        如果您将项目定义为 .exe 但打算创建 .lib 或 .dll,则会出现此错误

        【讨论】:

          【解决方案8】:

          Main 在入口点配置中丢失。

          【讨论】:

            猜你喜欢
            • 2018-01-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多