Ошибка C ++ при компиляции образца Orbiter - неразрешенный внешний символ LNK2019 - PullRequest
0 голосов
/ 20 февраля 2019

У меня очень специфическая проблема, когда я пытаюсь скомпилировать «примерный» проект для симулятора космического полета 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

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

Linker - Ввод - Дополнительные библиотеки

и

Linker - Дополнительно - Пути поиска в библиотеке

Когда я проверяю по 1-му, у меня есть следующее при Linker>Ввод> Дополнительные зависимости:

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

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

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

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

1 Ответ

0 голосов
/ 27 февраля 2019

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

https://www.orbiter -forum.com / showthread.php? P = 589264 & posts = 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 &&)

Это указывает на то, чтона конструктор move ссылается объявление класса Atlantis_SRB, которое невозможно найти в VS2017.Это та часть, которая указывает на то, что на конструктор перемещений ссылаются:

__declspec(dllimport) public: __thiscall VESSEL2::VESSEL2(class VESSEL2 &&)

Исправление состоит в том, чтобы удалить ожидание существования этого конструктора перемещения, отредактировав файл Atlantis.h в образце Atlantis.Ссылка на вопрос на форуме Orbiter дает полную информацию о том, что вам нужно сделать.

...