Ошибка 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 дает полную информацию о том, что вам нужно сделать.