在尝试为Orbiter太空飞行模拟器编译“样本”项目时,我遇到了一个非常具体的问题。我正在尝试使用Visual Studio 2019的预览版编译“Atlantis”航天飞机的样本,我收到的错误如下:
LNK2019 unresolved external symbol "__declspec(dllimport) public: __thiscall VESSEL2::VESSEL2(class VESSEL2 &&)" (__imp_??0VESSEL2@@QAE@$$QAV0@@Z) referenced in function "public: __thiscall Atlantis_SRB::Atlantis_SRB(class Atlantis_SRB &&)" (??0Atlantis_SRB@@QAE@$$QAV0@@Z)
这发生在Atlantis_SRB
项目中。我的代码位于:
C:\ Orbiter2016 \ Orbitersdk \ \样品亚特兰蒂斯\
我在软件工程方面有很多经验,但我是C ++菜鸟。我已经看过这个错误的一般帮助,所以我知道有些东西需要联系起来,但我不确定是什么,或者怎么做。
我在Orbiter论坛上看了这个问题:
https://www.orbiter-forum.com/showthread.php?t=24247
它建议在项目>属性下检查以下内容:
链接器 - 输入 - 附加库
和
链接器 - 高级 - 库搜索路径
当我在第一个下面检查时,我在链接器>输入>附加依赖项下有以下内容:
orbiter.lib;orbitersdk.lib;%(AdditionalDependencies)
第二个位置(链接器 - 高级 - 库搜索路径)不存在。
当“引用”中缺少dll并且知道如何快速解决它时,我习惯了C#引用错误,但我不知道如何处理这种类型的C ++问题。
我如何确定具体问题是什么,我需要链接什么,在哪里(以及如何?!)
我在优秀的Orbiter论坛上发布了这个问题,并且cyph0r提供了一个可以与VS2017一起使用的修复程序:
https://www.orbiter-forum.com/showthread.php?p=589264&posted=1#post589264
基本上orbiter.lib似乎只是完全兼容'开箱即用'直到VS2013,显然亚特兰蒂斯样本使用VS2013编译得很好。 (我回到使用VS2017并实现了cyph0r的修复,这有效 - 我还没试过VS2019):
这是错误的重要部分:
__declspec(dllimport) public: __thiscall VESSEL2::VESSEL2(class VESSEL2 &&)" (__imp_??0VESSEL2@@QAE@$$QAV0@@Z) referenced in function "public: __thiscall Atlantis_SRB::Atlantis_SRB(class Atlantis_SRB &&)
它表明Atlantis_SRB类声明正在引用移动构造函数,这在VS2017中找不到。这是指示正在引用移动构造函数的部分:
__declspec(dllimport) public: __thiscall VESSEL2::VESSEL2(class VESSEL2 &&)
修复是通过编辑Atlantis样本中的Atlantis.h文件来消除此移动构造函数存在的期望。 Orbiter论坛上问题的链接提供了您需要做的全部细节。