LNK2019 来自新 DLL 项目的 MSVCRTD.lib 中未解析的外部符号 _main

问题描述

我在 Visual Studio 2019 中开始了一个新的 C++ 解决方案,其中包含两个项目(以下简称:project1 和 project2)。

Project1 被设置为 DLL 项目并且没有 main() 或 _main() 函数。 Project2 设置为启动项目,包含 main() 函数

Project1 在构建时收到以下错误

代码:LNK2019

描述:未解析的外部符号 _main 在函数“int __cdecl invoke_main(void)”(?invoke_main@@YAHXZ)

中引用 项目:项目1

文件:MSVCRTD.lib(exe_main.obj)

我查看了网站上的其他一些类似问题,以下信息似乎相关:

  • 我使用“空项目”设置来创建两个项目
  • 以下配置适用于平台“x64”的“所有配置”
    • 配置属性->常规->配置类型:动态库(.dll)
    • 配置属性->链接器->系统->子系统:Windows (/SUBSYstem:WINDOWS)
      • 我还尝试将上述属性设置为“子系统”菜单上的每个可用选项,但均无法解决问题。

我还注意到它下面有一个相关的 LNK1120 错误(详细信息如下),尽管我的配置类型设置为 DLL,但违规文件被列为“project1.exe”...还有其他地方吗我需要将项目设置为 DLL 或删除 .exe 引用?

代码:LNK1120

描述:1 个未解析的外部

项目:项目1

文件:Project1.exe

解决方法

哎呀: 我忘了从项目属性中删除 x86 平台。对于将来遇到此问题的任何人:

如果您只想为 x64 构建,请从属性对话框中选择“配置管理器”。然后展开“活动解决方案平台:”下拉菜单并选择“编辑”。选择您要删除的配置(在我的情况下为 x86)并选择“删除”。然后确保在所有其余平台上正确设置了“配置类型”和“子系统”。 (如果您选择“平台:所有平台”并检查这些值,它们不应显示“不同的选项”。(这解决了我的问题。)

如果您希望为所有平台构建,请确保在项目属性对话框中的“所有平台”和“所有配置”上设置了“配置类型”和“子系统”选项。

确保对您希望这些更改影响的解决方案中的所有项目执行相同的操作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...