OpenDDS-解决方案构建良好,示例可以运行,但是IDL exe崩溃

时间:2019-09-25 15:12:47

标签: windows visual-studio-2017 tao opendds

我已经从源代码成功构建了OpenDDS 3.13.2。这是我的环境:

  • Windows 10
  • Visual Studio 2017(SDK 10.0.17763.0的重新定向解决方案)
  • 尝试了所有配置/平台组合

我成功使用了VS命令提示符中的configure脚本,通过在同一命令提示符中打开生成的解决方案来构建所有内容,最后运行Messenger示例(发布者和订阅者),甚至将其配置为使用RTPS成功。

但是,当我尝试创建自己的IDL并使用tao_idl时,它崩溃了。这是我的测试(使用来自setenv.cmd的适当环境):

> tao_idl(无参数)

IDL: No input files

第二项测试:

> tao_idl Test.idl(崩溃)

我没有收到任何错误消息,并且无法找到日志或任何错误提示。当我使用opendds_idl时,也会发生同样的事情。

进行调试的最佳方法是什么,和/或是否有IDL编译器(TAO和OpenDDS都可用)的预构建二进制文件?

1 个答案:

答案 0 :(得分:1)

经过大约一天的故障排除,我确定了解决方案。尽管可以自己调用tao_idl和opendds_idl,但您基本上不应该这样做。要使两者都正常工作,需要大量的命令行参数,如果它们不存在,则每个exe都会在没有适当原因的情况下崩溃。

我将在下面添加我的步骤,以使用OpenDDS创建一个新的基本的两个exe pub / sub项目:

  1. 创建自己的IDL文件。
  2. 从DCPS Messenger示例开始,修改.mpc文件,用您的IDL文件名替换Messenger.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命令行终端并运行$DDS_ROOT/setenv.cmd,或者如果通过Windows设置设置了那些环境变量,则打开常规终端。

  5. 导航至项目目录并调用:mwc.pl -type vs2017,并根据需要为构建工具/ IDE替换“ vs2017”。

  6. 打开生成的解决方案,并根据您的Windows SDK版本的需要将其重新定位。

  7. 首先构建<your project>_IDL项目。如果您在输出窗口中注意到,它会自动调用tao_idlopendds_idl命令。您可以查看.vcxproj文件来查看原始问题的完整命令行参数。

  8. 修改publisher.cppsubscriber.cppDataReaderListenerImpl.cpp文件以匹配您的新IDL。照常运行该示例,然后按一下!

为完整起见,tao_idlopendds_idl的完整命令如下:

> opendds_idl -Sa -St "<your file>.idl"

> tao_idl -Wb,pre_include=ace/pre.h -Wb,post_include=ace/post.h -I$(TAO_ROOT) -Sa -St -I$(DDS_ROOT) "<your file>.idl"

> tao_idl -Wb,pre_include=ace/pre.h -Wb,post_include=ace/post.h -I$(TAO_ROOT) -Sa -St -I$(DDS_ROOT) "<your file>TypeSupport.idl"