opendds编译
环境准备
1.github下载发布的opendds的linux版本;
2.下载对应 tao+ace版本;
3.解压
配置环境变量
export ACE_ROOT=/home/workspace/opendds/ACE_wrappers
export TAO_ROOT=$ACE_ROOT/TAO
export DDS_ROOT=/home/workspace/opendds/DDS
export PATH=ACE_ROOT/bin:DDS_ROOT/bin:$PATH
export LD_LIBRARY_PATH=ACE_ROOT/lib:DDS_ROOT/lib:$LD_LIBRARY_PATH
export PERL5LIB=$DDS_ROOT/bin/PerlDDS
在/etc/profile文件中添加。
准备编译
1.新建 $ACE_ROOT/ace/config.h
, 内容如下:
#include "ace/config-linux.h"
有点类似windows下编译
2.新建$ACE_ROOT/include/makeinclude/platform_macros.GNU
, 内容如下:
include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU
配置完以上文件之后,可以进行编译:
编译次序为: ACE -> TAO -> OpenDDS
编译ACE和TAO时,使用
make clean
make
编译opendds时,先配置
./configure
然后编译执行
make -j$(nproc)
source setenv.sh
完成以后,执行
cd DevGuideExamples/DCPS/Messenger
./run_test.pl
测试是否成功。
opendds开发
c++库开发
和windows差不多,只是工具有变化,需要准备idl文件,MWC和Mpc文件。
文件和windows一样,新增的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
}。
和windows平台一样,需要有一个对外导出的接口,库的编译没有对外导出,所以需要专门的接口方法导出。
准备好其它文件以后,在目录中如下命令:
$ACE_ROOT/bin/mwc.pl -type make
然后执行make命令生成.so文件。
C#调用库开发
1.安装.netCore环境
网上很多不说了。
2.安装vscode.
网上很多不说了。
3.封装调用接口
这里windows一样,唯一尴尬的是,委托回调异常。
windows平台下,直接订阅时注册一个委托,有订阅的数据时直接回调,在windows下没有问题,但是在ubuntu下,方法异常,不能回调,一旦调用对象回调就报错,试了没有解决。换了一种方法,c++接收到数据以后缓存,然后提供接口,外部通过接口获取缓存里面的数据即可。
ubuntu下C#不能回调,c++调用对象异常,有人研究的话说一下。
最后测试验证,程序正常了。目前在ubuntu下只能c#获取数据,不能回调。
最后把所ubuntu的代码也一并上传了。还是windows下的代码里面。
Java接口opendds自带,我就不研究了。