我已经从源代码成功构建了OpenDDS 3.13.2。这是我的环境:
我成功使用了VS命令提示符中的configure
脚本,通过在同一命令提示符中打开生成的解决方案来构建所有内容,最后运行Messenger示例(发布者和订阅者),甚至将其配置为使用RTPS成功。
但是,当我尝试创建自己的IDL并使用tao_idl时,它崩溃了。这是我的测试(使用来自setenv.cmd的适当环境):
> tao_idl
(无参数)
IDL: No input files
第二项测试:
> tao_idl Test.idl
(崩溃)
我没有收到任何错误消息,并且无法找到日志或任何错误提示。当我使用opendds_idl
时,也会发生同样的事情。
进行调试的最佳方法是什么,和/或是否有IDL编译器(TAO和OpenDDS都可用)的预构建二进制文件?
答案 0 :(得分:1)
经过大约一天的故障排除,我确定了解决方案。尽管可以自己调用tao_idl和opendds_idl,但您基本上不应该这样做。要使两者都正常工作,需要大量的命令行参数,如果它们不存在,则每个exe都会在没有适当原因的情况下崩溃。
我将在下面添加我的步骤,以使用OpenDDS创建一个新的基本的两个exe pub / sub项目:
Messenger.idl
。创建一个名为<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
}
打开一个新的VS命令行终端并运行$DDS_ROOT/setenv.cmd
,或者如果通过Windows设置设置了那些环境变量,则打开常规终端。
导航至项目目录并调用:mwc.pl -type vs2017
,并根据需要为构建工具/ IDE替换“ vs2017”。
打开生成的解决方案,并根据您的Windows SDK版本的需要将其重新定位。
首先构建<your project>_IDL
项目。如果您在输出窗口中注意到,它会自动调用tao_idl
和opendds_idl
命令。您可以查看.vcxproj
文件来查看原始问题的完整命令行参数。
修改publisher.cpp
,subscriber.cpp
和DataReaderListenerImpl.cpp
文件以匹配您的新IDL。照常运行该示例,然后按一下!
为完整起见,tao_idl
和opendds_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"