我正在尝试使用Visual Studio 2012 Express for Windows Desktop编译Parrot ARDrone SDK v1.8的Win32示例。我用的是64位的Windows 7。SDK是用C编写的,而不是c++。
到目前为止,我已经设法解决了所有的错误,但这一个把我难住了。
当运行时,我在错误列表中得到这3条消息:Warning 1 warning LNK4001: no object files specified; libraries used C:UsersNetexDesktopARDrone_SDK_Version_1_8_20110726ARDrone_SDK_Version_1_8_20110726ExamplesWin32VCProjectsARDroneWin32ClientLINK Win32Client
Error 2 error LNK2001: unresolved external symbol _mainCRTStartup C:UsersNetexDesktopARDrone_SDK_Version_1_8_20110726ARDrone_SDK_Version_1_8_20110726ExamplesWin32VCProjectsARDroneWin32ClientLINK Win32Client
Error 3 error LNK1120: 1 unresolved externals C:UsersNetexDesktopARDrone_SDK_Version_1_8_20110726ARDrone_SDK_Version_1_8_20110726ExamplesWin32VCProjectsARDroneDebugWin32Client.exe Win32Client
我尝试了许多建议的解决方案,包括将Linker->System中的子系统设置为"Not Set"和手动设置入口点,这样可以消除2个错误,并将其替换为:
'错误2错误LNK1221:子系统无法推断,必须定义'
我尝试将Platform Toolset设置为v90(我相信它最初是在v90中编译的),这样可以消除警告,但错误仍然存在。
问题:是什么导致这些消息,我如何解决它?是因为我试图在64位系统上编译Win32控制台程序吗?
任何帮助都是非常感谢的,
丹我正在使用Visual Studio 2019的Qt VS Tools扩展,并在使用新项目向导创建的Qt Gui应用程序上使用c++工作。在配置属性|链接器|系统下的项目属性中,我将子系统设置为"控制台(/子系统:控制台)",以便在调试时在GUI旁边出现控制台窗口。这允许我查看我使用qDebug添加的输出,如下所示:
qDebug () & lt; & lt;"测试",
我发现的是,如果我执行构建|清洁解决方案,然后构建|构建解决方案,我得到这个错误在第一个构建:
LNK2001无法解析的外部符号mainCRTStartup
最初我试图找出如何解决这个问题(并跑过这篇文章),但后来我发现,如果我重复构建|构建解决方案,错误就会在后续构建中消失,所以我的解决方案是在清理后记住构建两次。
看看如果我从未将子系统更改为"控制台(/子系统:控制台)"会发生什么,我使用向导创建了一个新的Qt Gui应用程序项目。在这个项目中,子系统被设置为"Windows (/SubSystem: Windows)"作为默认值。在清理后的第一次构建中再次出现错误,但在这种情况下,它是一个不同的未解析符号:
LNK2001未解析的外部符号WinMainCRTStartup
虽然我对问题的原因很好奇,但现在构建两次的解决方案对我来说是有效的。
在我的例子中,解决方案是明确地命名"入口点",例如使用命令行:
ml64 main.asm /subsystem:console /entry:main
最后一个选项:'/entry:main'至关重要