OMNeT ++: неопределенная ссылка на `typeinfo для inet :: IMobility ' - PullRequest
0 голосов
/ 06 октября 2018

Я имитирую сеть в OMNeT ++ с использованием инфраструктуры INET.У меня есть составной модуль в качестве сетевого узла, состоящий из простого модуля / узла и модуля мобильности.Я хочу получить позицию узла со следующим кодом:

void node::initialize()
{
    cModule *host = getContainingNode(this);
    IMobility *mobility = check_and_cast<IMobility *>(host->getSubmodule("mobility"));
    Coord selfPosition = mobility->getCurrentPosition();
}

Я также включил "inet / mobility / contract / IMobility.h".

Это должно быть просто, но сборка завершается с ошибкой:

../out/clang-release/src/node.o:(.text[_ZN7omnetpp14check_and_castIPN4inet9IMobilityENS_7cModuleEEET_PT0_]+0x18): undefined reference to `__imp__ZTIN4inet9IMobilityE'
../out/clang-release/src/node.o:(.rdata[_ZTIPN4inet9IMobilityE]+0x18): undefined reference to `typeinfo for inet::IMobility'

Я понимаю, что это как-то связано с компилятором, но не ясно, как я могу решить эту проблему в среде OMNeT ++.Есть идеи?

1 Ответ

0 голосов
/ 08 октября 2018

Я нашел обходной путь, если кто-то заинтересован.Я изменил компилятор с clang на gcc, и это сработало.Для этого:

  1. Перейдите в корневую папку OMNeT ++
  2. Отредактируйте файл «configure.user» и раскомментируйте строку «CC = gcc» (строка расположена рядом сначало файла)
  3. Запустите mingwenv.cmd (откроется новое командное окно)
  4. Выполните команды "./configure" и "make"

Эта последовательность изменяет компилятор с clang на gcc, перекомпилирует ресурсы и устраняет проблему.

Я должен подчеркнуть, что я нахожусь на Windows 10. Та же проблема не должна быть замечена в Linux, где компилятором по умолчанию должен быть gcc.

Насколько корень проблемыобеспокоен тем, что он, вероятно, должен что-то делать с флагом, касающимся RTTI (информация о типе времени выполнения), который должен быть включен для компиляции.Мне не удалось включить это для clang в OMNeT ++, но смена компилятора сделала свое дело.

...