【问题标题】:Error LNK1561: entry point must be defined错误 LNK1561:必须定义入口点
【发布时间】:2013-06-21 05:31:27
【问题描述】:

我正在使用 Visual Studio 2012。

我的解决方案有 3 个项目

项目A

项目B

projectC

层次结构就像

projectC 依赖于 projectB,而 projectB 又依赖于 projectA。 projectC中有一个ma​​in函数,projectB和projectA中没有main。 我得到的错误是:

error LNK1561: entry point must be defined      projectA
error LNK1561: entry point must be defined      projectB

我尝试过改变 配置属性 -> 链接器 -> 系统 -> 子系统到控制台 (/SUBSYSTEM:CONSOLE) 但问题仍然存在

帮我解决这个问题。

【问题讨论】:

  • 从事物的声音来看,你只需要一个项目,它应该包括所有三个类(或者它们到底是什么)。
  • 什么是 rtpDecoder 和 rtpDsTestsuite?它们也是程序还是静态/动态库?
  • 在问题正文中添加您的程序。
  • 项目的原始名称无论如何都是问题和答案的历史,因此如果想看到它们,更改它们并没有太大变化......

标签: c++ c visual-studio-2010 linker-errors


【解决方案1】:

您似乎误解了“模块”一词。 Visual Studio 中没有这样的 C++ 项目; C++ 项目可分为三类:

  • 程序 - 编译生成一个exe 文件,可以执行该文件;
  • 静态库 - 编译生成一个lib 文件,该文件可能包含在另一个项目中并在编译期间被链接;
  • 动态库 - 编译生成一个 dll 文件,该文件可以在运行时附加到您的程序并提供额外的功能。

根据您的描述,您希望 projectB 和 projectC 成为静态库,但您将它们创建为可执行文件。再次运行新建项目向导并选择“静态库”而不是“Windows 应用程序”。

您可以在MSDN library 中阅读有关静态库的更多信息。

如果静态库对您的应用程序来说太重了,您可以简单地将 projectB 和 projectC 文件包含在您的项目中(可选地注意命名空间以免混淆类的名称)。这完全取决于您计划在这些“模块”中实现多少功能。

【讨论】:

  • 除了使用向导创建新库外,您还可以通过Configuratin Properties > General > Configuration Type 为现有项目更改此设置。如果您更改该字段,您可能还想更改Configuration Properties > General > Target Extension
【解决方案2】:

设置属性 -> 链接器 -> 系统 -> 子系统为“Windows (/SUBSYSTEM:WINDOWS)”

【讨论】:

    【解决方案3】:

    可能发生的事情,发生在我身上的事情是,当您将项目的属性从 .exe 切换到 .dll 时,如果您从调试切换到发布或从 x86 切换到 x64,每次这样做都会切换你回到.exe。每个配置都有它自己的属性。

    所以,转到属性 > 配置类型 > .dll

    如果你确实想制作一个 .dll。

    【讨论】:

    • 我的问题是我的配置是为 x64 定义的,但在构建时意外选择了 x86
    【解决方案4】:

    我猜你是用 Windows 来创建这个项目的不是那么我不确定如何解决这个问题。

    【讨论】:

    • 我正在使用 SDL,但 #include <Windows.h> 没有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2018-03-18
    • 1970-01-01
    • 2018-01-29
    相关资源
    最近更新 更多