0

在尝试为 Orbiter 太空飞行模拟器编译“示例”项目时,我遇到了一个非常具体的问题。我正在尝试使用 Visual Studio 2019 的预览版为航天飞机“亚特兰蒂斯”编译示例,但出现如下错误:

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\samples\Atlantis\

我在软件工程方面有很多经验,但我是 C++ 菜鸟。我已经查看了此错误的一般帮助,所以我知道有一些东西需要链接,但我不确定是什么或如何做。

我在 Orbiter 论坛上查看了这个问题:

https://www.orbiter-forum.com/showthread.php?t=24247

它建议在项目 > 属性下检查以下内容:

链接器 - 输入 - 附加库

链接器 - 高级 - 库搜索路径

当我检查第一个时,我在链接器 > 输入 > 附加依赖项下有以下内容:

orbiter.lib;orbitersdk.lib;%(AdditionalDependencies)

第二个位置(链接器 - 高级 - 库搜索路径)不存在。

当“引用”中缺少 dll 并且知道如何快速解决它们时,我已经习惯了 C# 引用错误,但我不确定如何处理此类 C++ 问题。

我如何确定具体问题是什么,我需要链接什么,在哪里(以及如何?!)

4

1 回答 1

0

我在优秀的 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 论坛上的问题链接提供了您需要做什么的完整详细信息。

于 2019-02-26T21:38:44.977 回答