OpenDDS安装环境构建+Demo实践(自己动手写一个)

此文用于辅助构建类似于OpenDDS\DevGuideExamples\DCPS\Messenger的Demo示例

本文相关参考资料

OpenDDS开发者文档

OpenDDS安装环境构建

参考博客

OpenDDS开发环境搭建(Windows 10+Visual Studio 2019)
这是一篇Windows下的环境搭建,要想同步Linux开发环境,参考OpenDDS的GitHub开源网站

Demo上手实践(依赖于Windows下的OpenDDS环境)

OpenDDS安装环境搭建完成

OpenDDS安装环境搭建完成以后,深度参考OpenDDS开发者文档Chapter 2章节内容进行Demo实践流程,这里不赘述具体各项内容,仅分享Demo实践过程中遇到的问题(
1.如果你也遇到了像我一样的问题,欢迎来留言区讨论。
2.如果你遇到了新问题,欢迎来留言区讨论。
3.如果你愿意,我们可以将新问题汇总到这里。我会备注清楚来源,当然你也可以链接出去补充,提前感谢~)

Demo实践过程中出现的问题

编写IDL文件出现的问题

  • IDL注释
    IDL是不能用//注释的,否则会在编译的时候出现问题。例如你在IDL里面定义了一个属性,你想在后面注释它代表什么,我习惯了用//注释,所以当初编译的时候出现过问题,也算一个小问题吧。具体注释的格式我也未细细探究。
  • IDL的版本不同,topic与key的定义语法不同
IDL3:
#pragma DCPS_DATA_TYPE "Demo::Message"
#pragma DCPS_DATA_KEY "Demo::Message id"

IDL4:
用类型注释的方法即可。分别为@topic和@key

如果在编译IDL文件的时候,提示:错误使用了IDL4的特性,是因为你当前默认使用的是IDL3,只需要在编译的时候使用 --idl-version 4 指定IDL的版本为4即可。

  • IDL 匿名序列类型的问题
    算是一个大问题。折腾了我好久。我在之前的IDL文件中定义了一个类型为sequence的属性:
 sequence<double> Data;

导致后续在编译的过程中出现了链接多重定义的问题,排查了好久。发现:

这是官网给出的一段描述,大致意思就是TAO内部已经有了这些序列类型的定义,而你直接定义sequence则会在编译的时候链接报错。修改方法就是上面描述的那样,在你的IDL文件中,包含相关序列类型的pidl文件即可。如下所示:

#include <tao/DoubleSeq.pidl>
module Demo {
    @topic
    struct Message {
        @key long id;      
        double a;  
        double b;  
        double c;  
        CORBA::DoubleSeq Data;  
    };
};

编译IDL出现的问题

这里有两种编译方式,一种是MPC工具,一种是显式执行tao_idl,opendds_idl。网上的大多数教程,在使用MPC工具直接生成vs2019的.sln文件的时候并没有生成相应的DemoTypeSupport*的IDL类型支持文件,生成解决方案时也会出现错误(一般生成解决方案的时候会给你提示相关错误),究其原因,就是你的IDL文件本身就存在问题。所以下次用MPC工具之前,可以先用显式执行编译一下你的IDL文件,这时候它会给你提示相应的报错信息,你也好排查IDL文件的错误。

VS2019生成解决方案时的问题

总之我是先把相关的Publisher.cpp,Subscriber.cpp,DataReaderListenerImpl.cpp都完成以后再生成的解决方案,没有尝试未编写就生成解决方案,我看网上的大多数教程评论中出现的问题,根据错误反馈,应该就是这些文件没有补充完成出现的错误。我的建议是,先参照OpenDDS开发者文档将上述三个文件完成以后,再编译。

当你vs生成解决方案,编译都成功的时候,基本上Demo就已完成,简单点的话,你就直接开3个vs终端,转到项目目录下,按OpenDDS开发者文档中的启动顺序,启动即可。如果通信出现问题,就是你的上述3个cpp文件有问题

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值