只有 wWinMain MSVC 2019 的链接器错误无法解析外部符号

Posted

技术标签:

【中文标题】只有 wWinMain MSVC 2019 的链接器错误无法解析外部符号【英文标题】:Linker error unresolved external symbol with only wWinMain MSVC 2019 【发布时间】:2019-07-06 17:31:22 【问题描述】:

这是我唯一的代码:

#include <windows.h>

int APIENTRY wWinMain(
    _In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPWSTR pCmdLine,
    _In_ int nCmdShow)

    OutputDebugStringA("Hello\n");

    return 0;

具有完全相同签名的 wWinMain 函数在我使用“Windows 桌面应用程序”(或其他)模板创建的单独项目中工作。

但是我收到了一个带有以下信息的 LNK2019:

unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)

来自MSVCRTD.lib(exe_main.obj)

我在 Windows 10 上使用带有 MSVC 2019 的 Visual Studio 2019 社区版。我创建了一个“空项目”,并且在“源文件”目录中只有一个“main.cpp”文件。

谁能帮我尝试诊断这里可能出了什么问题?我没有运气阅读 msdn/在网上搜索解决方案,这非常令人沮丧,因为我只是想在这里起步。

谢谢。

【问题讨论】:

【参考方案1】:

在链接器设置中将子系统设置为 Windows(适用于所有配置和目标)。

Visual Studio 可以针对不同的 Windows subsystems 进行编译,每个都需要自己的程序入口点。错误提示“_main not found”表明您的子系统设置为控制台,因为链接器正在寻找main() 函数。

如果你有一个WinMain() 入口点(或wWinMain() 用于Unicode 模式),这意味着你的目标是Windows 子系统。

【讨论】:

以上是关于只有 wWinMain MSVC 2019 的链接器错误无法解析外部符号的主要内容,如果未能解决你的问题,请参考以下文章

MSVC 2005 链接器内存消耗问题

WinMain与wWinMain,win32的字符集问题

Win32程序的入口啥时候是WinMain,啥时候是wWinMain?有啥不同

(转) main(), _tmain(), wmain(), wWinMain(), _tWinMain()的区别

MSVC 2019:遗留库中的 libc 外部未解决

如何使用 msvc 2019 编译 QT 4 dll?