【发布时间】:2022-01-13 01:12:54
【问题描述】:
我有一个 MFC C++ 项目,它可以在 Windows 10 上使用 Visual Studio 2022 构建和运行良好。该项目根本不使用 Qt。在我使用 vcpkg 安装 Qt 6.2.1 后,项目停止构建并出现此链接器错误:
1>Qt6EntryPoint.lib(qtentrypoint_win.cpp.obj) : error LNK2019: unresolved external symbol main referenced in function WinMain
同样,我的项目中没有使用 Qt6。转到项目的Configuration Properties 并禁用Use Vcpkg 使其再次构建。这里发生了什么以及如何在不禁用 vcpkg 的情况下修复它?
我使用 VS 项目向导和默认设置创建了一个新的 C++ MFC 应用程序。它在启用 vcpkg 的情况下构建良好。
我能提供的唯一合理的解释是,在许多代以前,较旧的 VS,较旧的 Windows,我的项目使用 Qt4 核心中的一些类有一段时间,这导致了问题,因此删除了该功能。我继续在没有安装 Qt 的 Windows 上开发它。有没有可能对 Qt 的一些引用仍然存在?如何找到它?我检查了几次设置,但没有找到。
我查看了库搜索的顺序 (/VERBOSE:Lib),在启用 vcpkg -> Use Autolink 的情况下,首先搜索 vcpkg 文件夹。有没有办法让链接器先搜索系统文件夹?
这是发生了什么:
1> Searching C:\src\vcpkg\installed\\x64-windows\lib\Qt6EntryPoint.lib:
1> Found WinMain
1> Referenced in msvcrt.lib(exe_winmain.obj)
1> Loaded Qt6EntryPoint.lib(qtentrypoint_win.cpp.obj)
用/NODEFAULTLIB:"Qt6EntryPoint.lib" 排除Qt6EntryPoint.lib 无效。有没有其他方法可以排除?
【问题讨论】:
-
但是你确实使用了 Qt,你正在链接它。您可能没想到的是,MFC 和 Qt 都是要定义程序入口点的框架,因此它们可以足够早地初始化。链接器选择了 Qt 的 WinMain()。修复它有点尴尬,你必须先链接 MFC 库。 IIRC,链接依赖是用#pragma lib注入的,你必须明确地命名它。
-
@HansPassant 但你确实使用 Qt 不,我没有。链接器虚假地拾取它。我将查看#pragma lib 或尝试从构建中排除 Qt6EntryPoint.lib。
标签: c++ visual-studio linker-errors lib vcpkg