LNK2005 错误,因为我有两个并行运行的 c++ 窗口

Posted

技术标签:

【中文标题】LNK2005 错误,因为我有两个并行运行的 c++ 窗口【英文标题】:LNK2005 error because I have two c++ windows running parallel 【发布时间】:2016-03-07 06:42:32 【问题描述】:

我正在处理一个包含多个任务的 uni 项目,并且我正在尝试调试一个简单的程序,但是我收到错误“LNK2005 main already defined in task 1”。

我意识到这是因为我对这两个任务都使用了“int(main)”(我有任务 1 的代码和任务 2 的代码)。我不想为每个任务创建一个新的项目文件夹。有没有办法解决这个问题?

【问题讨论】:

这两个“任务”是否应该作为单独的程序运行?然后将它们创建为工作区中的单独项目是有意义的。如果您有公共代码,您可以将其放在两个项目都使用的单独文件夹中,或者为公共代码创建一个库项目,然后让程序与库链接。 最好包含你的代码。 否则,如果每个“任务”都应该在单个程序中作为单独的线程运行,那么您可以创建一个 main 函数来创建线程,然后调用“任务”主-functions(您必须将其重命名为适当的名称)。 @DaoXio 不是这种情况。 如果是这样,Joachim 的第二条评论是你最好的选择。 【参考方案1】:

虽然通常建议为您构建的每个可执行文件创建一个项目,但如果您设法以某种方式摆脱不希望的重复主目录,则可以避免为多个可执行文件创建一个项目。您有很多选择:

    只有一个主。让它测试自己的可执行名称,并根据它找到的名称采取特定的行动。在构建后规则中,设置用于从基本可执行文件创建每个(具体命名的)可执行文件的规则。这允许您以相当有效的方式同时构建所有可执行文件。

    有多个电源,但使用 #ifdefs 隐藏它们。将#define 添加到项目设置或 main() 上方的某个位置,然后根据需要进行编译。如果您不想一直构建所有可执行文件,这是可以的。

    硬着头皮设置多个项目。

无论您做什么,都要考虑到能够在一个步骤中构建您拥有的所有东西被认为是构建系统的一个非常理想的特性,并且通常在一个经过适当设计的开发过程应该具备的功能列表中很重要。

【讨论】:

非常感谢,这个解释真的让我明白了! 好答案!我想补充一点,虽然 MSVS 默认不提供,但您可以将多个项目文件放在同一个目录中。例如,他们可以通过这种方式共享源文件。但是,您将不得不调整配置​​中的一些目录,以便每个项目都有自己的输出目录、中间目录和程序数据库(加上我忘记的其他目录,它与 MSVS 2005、IIRC 一起使用)。您可以参考$(ProjectName) 形式的变量以简化此任务。此外,复制项目文件需要您删除它们的 UUID,因此 MSVS 会生成一个新的。

以上是关于LNK2005 错误,因为我有两个并行运行的 c++ 窗口的主要内容,如果未能解决你的问题,请参考以下文章

C++ 链接器错误 - 错误 LNK2005: ... 已定义

C/C++ 混合程序中的错误 LNK2005 和错误 LNK2019

带有矢量的 LNK2005 错误

Visual Studio 2005 中的错误 LNK1201

c++链接器错误LNK2005已经在SDL中定义

从 DLL 导出 STL std::basic_string 模板时,出现 LNK2005 错误