1. OpenDDS简介
OpenDDS是OMG数据分发服务(DDS)的一种开源实现,它遵循实时系统v1.2的DDS规范(OMG Document formal/07-01-01)和实时公布/订阅互操作性通信协议v2.1的DDS-RTPS规范(OMG Document formal/2010-11-01)。OpenDDS由OCI公司设计和维护,可从http://www.opendds.org/的OpenDDS社区门户中获得帮助
2. Perl安装编译
1> 下载Perl:https://www.perl.org/get.html#unix_like
2> 解压缩
tar -xvzf perl-5.32.0.tar.gz
3> 编译安装
tar -xvzf perl-5.32.0.tar.gz
./Configure
make
sudo make install
make clean
3. ACE+TAO下载(FULL版本)
1> 下载ACE+TAO:https://download.dre.vanderbilt.edu/
2> 解压缩:
sudo tar -zxvf ACE+TAO-6.5.10.tar.gz -C /opt
4. OpenDDS下载
1> 下载OpenDDS:http://download.ociweb.com/OpenDDS/
2> 解压缩:
sudo tar -zxvf OpenDDS-3.14.tar.gz -C /opt
5. 修改目录权限
cd /opt
sudo chmod 777 -R ACE_wrappers/
sudo chmod 777 -R OpenDDS-3.14/
6. 设置环境变量
1> 打开编辑bashrc
vim ~/.bashrc
2> 修改bashrc内容,在bashrc末尾添加
# ACE+TAO+DDS Environment
export ACE_ROOT=/opt/ACE_wrappers
export TAO_ROOT=$ACE_ROOT/TAO
export DDS_ROOT=/opt/OpenDDS-3.14
export PATH=$ACE_ROOT/bin:$DDS_ROOT/bin:$PATH
export LD_LIBRARY_PATH=$ACE_ROOT/lib:$DDS_ROOT/lib:$LD_LIBRARY_PATH
3> 使bashrc生效
source ~/.bashrc
8. 新增ace/config.h头文件
1> 新建ace/config.h头文件
vi $ACE_ROOT/ace/config.h
2> 复制以下内容到ace/config.h头文件中
#include "ace/config-linux.h"
9. 新增platform_macros.GNU文件
1> 新建platform_macros.GNU文件
vi $ACE_ROOT/include/makeinclude/platform_macros.GNU
2> 复制以下内容到platform_macros.GNU文件
include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU
10. 编译
1> 编译ACE
$ cd $ACE_ROOT
$ make clean
$ make
2> 编译TAO
$ cd $TAO_ROOT
$ make clean
$ make
3> 编译OpenDDS
$ cd $DDS_ROOT
$ export INSTALL_PREFIX="$PWD/opendds-install"
$ ./configure
$ sh setenv.sh
$ make
$ make install
11. 检测安装是否成功
1> 执行脚本run_test.pl
$ cd $DDS_ROOT/example/DCPS/Messenger_Imr
$ perl ./run_test.pl
2> 观察脚本运行输出(test PASSED表示环境正常)
>>> /opt/ACE_wrappers/TAO/orbsvcs/ImplRepo_Service/tao_imr_locator -o imr.ior -orbendpoint iiop://:10098
>>> /opt/ACE_wrappers/TAO/orbsvcs/ImplRepo_Service/tao_imr_activator -o activator.ior -ORBInitRef ImplRepoService=file://imr.ior -orbendpoint iiop://:10066
>>> /opt/OpenDDS-3.13.2/bin/DCPSInfoRepo -NOBITS -o repo.ior -ORBuseimr 1 -ORBInitRef ImplRepoService=file://imr.ior
>>> /opt/ACE_wrappers/bin/tao_imr -ORBInitRef ImplRepoService=file://imr.ior shutdown InfoRepo
Successfully shut down server <InfoRepo>
>>> /opt/ACE_wrappers/bin/tao_imr -ORBInitRef ImplRepoService=file://imr.ior update InfoRepo -l Fan-Lenovo -c "/opt/OpenDDS-3.13.2/bin/./DCPSInfoRepo -NOBITS -o repo.ior -ORBuseimr 1 -ORBInitRef ImplRepoService=file://imr.ior"
(486|140412808431424) ImR: Successfully registered <InfoRepo>
>>> /opt/ACE_wrappers/bin/tao_imr -ORBInitRef ImplRepoService=file://imr.ior list -v
Server <InfoRepo>
Activator: Fan-Lenovo
Command Line: /opt/OpenDDS-3.13.2/bin/./DCPSInfoRepo -NOBITS -o repo.ior -ORBuseimr 1 -ORBInitRef ImplRepoService=file://imr.ior
Working Directory:
Activation Mode: NORMAL
Number of retries: 0
Not currently running
/opt/OpenDDS-3.13.2/examples/DCPS/Messenger_Imr/publisher -DCPSConfigFile pub.ini -orbendpoint iiop://:10109
/opt/OpenDDS-3.13.2/examples/DCPS/Messenger_Imr/subscriber -DCPSConfigFile sub.ini
(488|139645218817856) Writer::start
(488|139645109663488) Writer::svc begins.
DataReaderListenerImpl::on_subscription_matched
(488|139645109663488) 14:52:25.926322 Writer::svc starting to write.
DataReaderListenerImpl::on_liveliness_changed
Message: subject = Review
subject_id = 99
from = Comic Book Guy
count = 0
text = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject = Review
subject_id = 99
from = Comic Book Guy
count = 1
text = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject = Review
subject_id = 99
from = Comic Book Guy
count = 2
text = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject = Review
subject_id = 99
from = Comic Book Guy
count = 3
text = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject = Review
subject_id = 99
from = Comic Book Guy
count = 4
text = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject = Review
subject_id = 99
from = Comic Book Guy
count = 5
text = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject = Review
subject_id = 99
from = Comic Book Guy
count = 6
text = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject = Review
subject_id = 99
from = Comic Book Guy
count = 7
text = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject = Review
subject_id = 99
from = Comic Book Guy
count = 8
text = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject = Review
subject_id = 99
from = Comic Book Guy
count = 9
text = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
DataReaderListenerImpl::on_liveliness_changed
DataReaderListenerImpl::on_subscription_matched
(488|139645109663488) Writer::svc finished.
(488|139645218817856) Writer::end
>>> /opt/ACE_wrappers/bin/tao_imr -ORBInitRef ImplRepoService=file://imr.ior shutdown InfoRepo
Successfully shut down server <InfoRepo>
test PASSED.
12. 常见问题
1> 出现ERROR: InfoRepoDiscovery::add_domain_participant:
虚拟机网络设置有问题,将NAT模式设置为桥接模式即可解决
2> 报错INSTALL_PREFIX没有设置,“they must be rebuilt after changing INSTALL_PREFIX”
export INSTALL_PREFIX=“$PWD/opendds-install”