LNK2019 来自 MSVCRTD.lib 中未解析的外部符号 _main 对于新的 DLL 项目
LNK2019 From Unresolved External Symbol _main in MSVCRTD.lib For New DLL Project
我在 Visual Studio 2019 年开始了一个新的 C++ 解决方案,其中包含两个项目(以下简称:project1 和 project2)。
Project1 被设置为 DLL 项目并且没有 main() 或 _main() 函数。 Project2设置为启动项目,包含main()函数。
Project1 在构建时收到以下错误:
CODE: LNK2019
DESCRIPTION: unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)
PROJECT: Project1
FILE: MSVCRTD.lib(exe_main.obj)
我浏览了网站上的其他一些类似问题,以下信息似乎相关:
- 我使用 'Empty Project' 设置创建了两个项目
- 以下配置适用于'All configurations'平台'x64'
- 配置属性->常规->配置类型:动态库(.dll)
- 配置属性->链接器->系统->子系统:Windows (/SUBSYSTEM:WINDOWS)
- 我也尝试将上述 属性 设置为子系统菜单上的每个可用选项,none 解决了问题。
我还注意到它下面有一个相关的 LNK1120 错误(详情如下),尽管我的配置类型设置为 DLL...还有其他地方我需要将项目设置为 DLL 或删除 .exe 引用吗?
CODE: LNK1120
DESCRIPTION: 1 unresolved externals
PROJECT: Project1
FILE: Project1.exe
糟糕:
我忘了从项目属性中删除 x86 平台。对于将来遇到此问题的任何人:
如果您只想为 x64 构建,请从属性对话框 select 'Configuration Manager'。然后展开 'Active solution platform:' 下拉列表和 select 'edit'。 Select 您希望删除的配置(在我的例子中是 x86)和 select 'remove'。然后确保您的 'Configuration Type' 和 'SubSystem' 在所有其余平台上都已正确设置。 (如果您 select 平台:所有平台'并检查这些值,它们不应显示 'different options'。(这解决了我的问题。)
如果您希望为所有平台构建,请确保在项目属性对话框中为 'all platforms' 和 'all configurations' 设置 'Configuration Type' 和 'SubSystem' 选项。
确保对您希望这些更改影响的解决方案中的所有项目执行相同的操作。
我在 Visual Studio 2019 年开始了一个新的 C++ 解决方案,其中包含两个项目(以下简称:project1 和 project2)。
Project1 被设置为 DLL 项目并且没有 main() 或 _main() 函数。 Project2设置为启动项目,包含main()函数。
Project1 在构建时收到以下错误:
CODE: LNK2019
DESCRIPTION: unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)
PROJECT: Project1
FILE: MSVCRTD.lib(exe_main.obj)
我浏览了网站上的其他一些类似问题,以下信息似乎相关:
- 我使用 'Empty Project' 设置创建了两个项目
- 以下配置适用于'All configurations'平台'x64'
- 配置属性->常规->配置类型:动态库(.dll)
- 配置属性->链接器->系统->子系统:Windows (/SUBSYSTEM:WINDOWS)
- 我也尝试将上述 属性 设置为子系统菜单上的每个可用选项,none 解决了问题。
我还注意到它下面有一个相关的 LNK1120 错误(详情如下),尽管我的配置类型设置为 DLL...还有其他地方我需要将项目设置为 DLL 或删除 .exe 引用吗?
CODE: LNK1120
DESCRIPTION: 1 unresolved externals
PROJECT: Project1
FILE: Project1.exe
糟糕: 我忘了从项目属性中删除 x86 平台。对于将来遇到此问题的任何人:
如果您只想为 x64 构建,请从属性对话框 select 'Configuration Manager'。然后展开 'Active solution platform:' 下拉列表和 select 'edit'。 Select 您希望删除的配置(在我的例子中是 x86)和 select 'remove'。然后确保您的 'Configuration Type' 和 'SubSystem' 在所有其余平台上都已正确设置。 (如果您 select 平台:所有平台'并检查这些值,它们不应显示 'different options'。(这解决了我的问题。)
如果您希望为所有平台构建,请确保在项目属性对话框中为 'all platforms' 和 'all configurations' 设置 'Configuration Type' 和 'SubSystem' 选项。
确保对您希望这些更改影响的解决方案中的所有项目执行相同的操作。