Ошибка C++ при компиляции образца Orbiter - неразрешенный внешний символ LNK2019

У меня очень специфическая проблема, когда я пытаюсь скомпилировать "примерный" проект для симулятора космического полета "Орбитер". Я пытаюсь скомпилировать образец для космического челнока "Атлантис", используя предварительную версию 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\ Атлантис \

У меня большой опыт разработки программного обеспечения, но я новичок в C++. Я посмотрел на общую справку по этой ошибке, поэтому я понимаю, что есть что-то, что нужно связать, но я не уверен, что или как это сделать.

Я посмотрел на этот вопрос на форуме Orbiter:

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

Он предлагает проверить следующее в свойствах проекта>:

Линкер - Вход - Дополнительные библиотеки

а также

Linker - Advanced - Пути поиска в библиотеке

Когда я проверяю под 1-ым, у меня есть следующее под Linker > Input > Additional Dependencies:

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

Второе местоположение (Linker - Advanced - пути поиска в библиотеке) не существует.

Я привык к ошибкам ссылок C#, когда dll отсутствует в "ссылках" и знаю, как их быстро решить, но я не уверен, что делать с этим типом проблемы C++.

Как определить, в чем заключается конкретная проблема, и что мне нужно связать, где (и как?!)

1 ответ

Я разместил эту проблему на отличном форуме Orbiter, и cyph0r предоставил там исправление, которое работает с VS2017:

https://www.orbiter-forum.com/showthread.php?p=589264&posted=1#post589264

По сути, orbiter.lib полностью совместим "из коробки" только до VS2013, и, очевидно, образец Atlantis прекрасно компилируется с использованием 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.h в образце Atlantis. Ссылка на вопрос на форуме Orbiter дает полную информацию о том, что вам нужно сделать.

Другие вопросы по тегам