OpenDDS - решение прекрасно работает, примеры выполняются, но происходит сбой IDL - PullRequest
0 голосов
/ 25 сентября 2019

Я успешно собрал OpenDDS 3.13.2 из исходного кода.Вот мое окружение:

  • Windows 10
  • Visual Studio 2017 (перенацеленное решение для SDK 10.0.17763.0)
  • Пробовал все комбинации конфигурации / платформы

Я успешно использовал сценарий configure из командной строки VS, собрал все, открыв сгенерированное решение в той же командной строке, и, наконец, запустил пример Messenger (издатель и подписчик) и даже настроил егоуспешно использовать RTPS.

Однако, когда я пытаюсь создать свой собственный IDL и использую tao_idl, он вылетает.Вот мой тест (с использованием подходящей среды из setenv.cmd):

> tao_idl (без аргументов)

IDL: No input files

Второй тест:

> tao_idl Test.idl (вылетает)

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

Каков наилучший подход для отладки этого, и / или есть ли готовые двоичные файлы, доступные для компилятора (ов) IDL (как TAO, так и OpenDDS)?

1 Ответ

0 голосов
/ 26 сентября 2019

Примерно через день после устранения неполадок я нашел решение.Несмотря на то, что вы можете вызывать tao_idl и opendds_idl самостоятельно, вы в принципе никогда не должны этого делать.Существует достаточное количество аргументов командной строки, необходимых для того, чтобы заставить их работать, и, если они отсутствуют, каждый исполняемый файл вылетит без надлежащего объяснения причины.

Я добавлю свои шаги ниже, чтобы создатьновый базовый проект pub-sub / exe с использованием OpenDDS:

  1. Создайте свой собственный файл IDL.
  2. Начиная с примера DCPS Messenger, измените файл .mpc, заменив Messenger.idlс вашим именем файла IDL.
  3. Создайте новый файл с именем <your project>.mwc и добавьте следующее содержимое:

    workspace {
      // the -relative and -include cmdlines make it so this workspace 
      // does not have to be in the $DDS_ROOT directory tree.
    
      // tell MPC to substitute our DDS_ROOT environment variables for relative paths
      cmdline += -relative DDS_ROOT=$DDS_ROOT
    
      // tell the projects where to find the DDS base projects (*.mpb)
      cmdline += -include $DDS_ROOT/MPC/config
    
    }
    
  4. Откройте новую команду VS-line терминал и запустите $DDS_ROOT/setenv.cmd, или откройте обычный терминал, если эти переменные среды установлены в настройках Windows.

  5. Перейдите в каталог проекта и вызовите: mwc.pl -type vs2017, заменив«vs2017», как требуется для вашего инструмента сборки / IDE.

  6. Откройте сгенерированное решение и перенастройте его по мере необходимости для вашей версии Windows SDK.

  7. Сначала создайте проект <your project>_IDL.Если вы заметили в окне вывода, оно автоматически вызывает команды tao_idl и opendds_idl.Вы можете просмотреть файлы .vcxproj, чтобы увидеть полные аргументы командной строки, которые были исходной проблемой.

  8. Измените файлы publisher.cpp, subscriber.cpp и DataReaderListenerImpl.cpp насоответствует вашему новому IDL.Запустите пример как обычно, и та-да!

...