1

我正在尝试使用 Visual Studio 2012 Express for Windows Desktop 编译 Parrot ARDrone SDK v1.8 的 Win32 示例。我正在运行 Windows 7 64 位。SDK 是用 C 编写的,而不是 C++。

到目前为止,我已经设法解决了每一个错误,但是这个让我很难过。

运行时,我在错误列表中收到以下 3 条消息:
Warning 1 warning LNK4001: no object files specified; libraries used C:\Users\Netex\Desktop\ARDrone_SDK_Version_1_8_20110726\ARDrone_SDK_Version_1_8_20110726\Examples\Win32\VCProjects\ARDrone\Win32Client\LINK Win32Client

Error 2 error LNK2001: unresolved external symbol _mainCRTStartup C:\Users\Netex\Desktop\ARDrone_SDK_Version_1_8_20110726\ARDrone_SDK_Version_1_8_20110726\Examples\Win32\VCProjects\ARDrone\Win32Client\LINK Win32Client

Error 3 error LNK1120: 1 unresolved externals C:\Users\Netex\Desktop\ARDrone_SDK_Version_1_8_20110726\ARDrone_SDK_Version_1_8_20110726\Examples\Win32\VCProjects\ARDrone\Debug\Win32Client.exe Win32Client

我尝试了许多建议的解决方案,包括将 Linker->System 中的 SubSystem 设置为“未设置”并手动设置入口点,这消除了 2 个错误并将其替换为:
`Error 2 error LNK1221: a subSystem can '不能推断,必须定义'

我尝试将平台工具集设置为 v90(我相信它最初是在其中编译的),这消除了警告,但错误仍然存​​在。

问题:是什么导致了这些消息,我该如何解决?是因为我试图在 64 位系统上编译 Win32 控制台程序吗?

任何帮助深表感谢,

4

2 回答 2

0

就我而言,解决方案是明确命名“入口点”,例如使用命令行:

ml64 main.asm /subsystem:console /entry:main

最后一个选项:'/entry:main' 至关重要

于 2021-06-22T02:47:41.703 回答
0

我正在使用带有 Visual Studio 2019 的 Qt VS Tools 扩展,并在使用新项目向导创建的 Qt Gui 应用程序上使用 C++ 工作。在我的项目属性下配置属性 | 链接器 | 系统,我已将 SubSystem 设置为“Console (/SUBSYSTEM:CONSOLE)”,以便在调试时在我的 GUI 旁边出现一个控制台窗口。这允许我查看使用 qDebug 添加的输出,如下所示:

qDebug() << "测试";

我发现如果我执行 Build | 清理解决方案,然后构建 | 构建解决方案,我在第一次构建时收到此错误:

LNK2001 无法解析的外部符号 mainCRTStartup

最初我试图弄清楚如何解决这个问题(并浏览了这篇文章),但后来我发现如果我重复构建 | 构建解决方案该错误在后续构建中消失,因此我的解决方案是记住在清理后构建两次。

为了看看如果我从未将 SubSystem 更改为“Console (/SUBSYSTEM:CONSOLE)”会发生什么,我使用向导创建了一个新的 Qt Gui 应用程序项目。在这个项目中,SubSystem 默认设置为“Windows (/SUBSYSTEM:WINDOWS)”。我再次在清理后的第一次构建时收到错误,但在这种情况下,它是一个不同的未解析符号:

LNK2001 无法解析的外部符号 WinMainCRTStartup

尽管我对问题的原因感到好奇,但构建两次解决方案目前对我有用。

于 2019-12-21T19:13:26.920 回答