【原创】OpenDDS笔记(二) Linux环境下的环境搭建

1.1 环境

  • Linux:Ubuntu 16.04LTS
  • Perl:V5.22.1
  • Make:GNU Make V4.1
  • gcc:V5.4.0

1.2 下载ACE+TAO与OpenDDS

ACE+TAO下载地址:http://download.dre.vanderbilt.edu/
OpenDDS下载地址:http://download.ociweb.com/OpenDDS/

下载时注意:

  • ACE+TAO下载选择FULL版本。
    FULL版本:包含所有GNU make预生成makefile的源代码;
    Sources only版本:仅包含源代码,需要使用MPC生成makefile
  • Linux下选择*.tar.gz格式,Windows下选择*.zip格式。

1.3 解压安装ACE+TAO与OpenDDS

将ACE+TAO与OpenDDS解压至/DevOpenDDS目录下

sudo tar -zxvf ACE+TAO-6.5.12.tar.gz -C /DevOpenDDS
sudo tar -zxvf OpenDDS-3.15.tar.gz -C /DevOpenDDS

解压完毕后,在/DevOpenDDS目录下已存在ACE_wrappersOpenDDS两个文件夹,修改其权限
这步很有必要,不修改权限会在编译时出现Permission denied的情况

cd /DevOpenDDS
sudo chmod 777 -R ACE_wrappers/
sudo chmod 777 -R OpenDDS/

1.4 设置相关环境变量

/etc/profile文件尾添加如下环境变量,重启生效

(之前有博客说在.bashrc里添加环境变量,我在编译的时候,总是报"找不到目录",以上红色文字部分才解决了这个问题。)

# ACE+TAO+DDS Environment
export ACE_ROOT=/home/jamie/DevOpenDDS/ACE_wrappers
export TAO_ROOT=$ACE_ROOT/TAO
export DDS_ROOT=/home/jamie/DevOpenDDS/OpenDDS
export PATH=$ACE_ROOT/bin:$DDS_ROOT/bin:$PATH
export LD_LIBRARY_PATH=$ACE_ROOT/lib:$DDS_ROOT/lib:$LD_LIBRARY_PATH

以上绿色路径部分,需要根据实际的路径进行调整。

二、编译

2.1 设置config.h

新建$ACE_ROOT/ace/config.h,文件内容为

#include “ace/config-linux.h”

2.2 设置Platform_macros.GNU

新建$ACE_ROOT/include/makeinclude/platform_macros.GNU,文件内容为

include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU

2.3 编译

编译顺序为:ACE -> TAO -> DDS,编译时间长。

  • ACE编译
cd $ACE_ROOT
make clean
make
  • TAO编译
cd $TAO_ROOT
make clean
make
  • DDS编译
cd $DDS_ROOT
./configure
make clean
make

2.4 运行测试脚本

编译完成后,运行测试脚本测试OpenDDS环境是否搭建成功。
$DDS_ROOT/examples/DCPS/Messenger_Imr目录,运行run_test.pl

cd $DDS_ROOT/example/DCPS/Messenger_Imr
perl ./run_test.pl

结果如下

>>> /home/jamie/DevOpenDDS/ACE_wrappers/TAO/orbsvcs/ImplRepo_Service/tao_imr_locator -o imr.ior  -orbendpoint iiop://:20428
>>> /home/jamie/DevOpenDDS/ACE_wrappers/TAO/orbsvcs/ImplRepo_Service/tao_imr_activator -o activator.ior -ORBInitRef ImplRepoService=file://imr.ior  -orbendpoint iiop://:15071
>>> /home/jamie/DevOpenDDS/OpenDDS/bin/DCPSInfoRepo  -NOBITS -o repo.ior  -ORBuseimr 1 -ORBInitRef ImplRepoService=file://imr.ior
>>> /home/jamie/DevOpenDDS/ACE_wrappers/bin/tao_imr -ORBInitRef ImplRepoService=file://imr.ior shutdown InfoRepo
Successfully shut down server <InfoRepo>
>>> /home/jamie/DevOpenDDS/ACE_wrappers/bin/tao_imr -ORBInitRef ImplRepoService=file://imr.ior update InfoRepo -l jamie-vm -c "/home/jamie/DevOpenDDS/OpenDDS/bin/./DCPSInfoRepo  -NOBITS -o repo.ior  -ORBuseimr 1 -ORBInitRef ImplRepoService=file://imr.ior"
(103868|103868) ImR: Successfully registered <InfoRepo>
>>> /home/jamie/DevOpenDDS/ACE_wrappers/bin/tao_imr -ORBInitRef ImplRepoService=file://imr.ior list -v
Server <InfoRepo>
  Activator: jamie-vm
  Command Line: /home/jamie/DevOpenDDS/OpenDDS/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

/home/jamie/DevOpenDDS/OpenDDS/examples/DCPS/Messenger_Imr/publisher   -DCPSConfigFile pub.ini -orbendpoint iiop://:21397
ERROR: Cannot Spawn: <././publisher> not found
/home/jamie/DevOpenDDS/OpenDDS/examples/DCPS/Messenger_Imr/subscriber   -DCPSConfigFile sub.ini
ERROR: Cannot Spawn: <././subscriber> not found
>>> /home/jamie/DevOpenDDS/ACE_wrappers/bin/tao_imr -ORBInitRef ImplRepoService=file://imr.ior shutdown InfoRepo
(103858|103858) ImR: shutdown_server () Cannot connect to server <InfoRepo>
Server <InfoRepo> already shut down.
test PASSED.

运行结果显示test PASSED,测试成功。


三、CentOS8下遇到的一些问题及解决方法          

CentOS 8.1 1191下环境搭建与Ubuntu18.04 过程一致,不过环境不同,遇到的问题各有差别,以下记录了自己在CentOS 8.1下遇到的几个问题:

1. make 完ACE和TAO之后,直接make OpenDDS,出现了找不到LibTao_PortableServer这样的错误,估计是TAO编译失败了,就重新更新系统及相关软件。重新编译ACE+TAO,OpenDDS编译通过。

2. 执行时,找不到LibTaoxxxx.so这样的错误,是找不到动态库的路径,可以参考OpenDDS笔记(四) 树莓派下的开发实例 、四、引申、2.2中所述设置so文件夹路径。/etc/ld.so.conf内容如下:

include ld.so.conf.d/*.conf
/home/jamie/DevOpenDDS/OpenDDS/lib
/home/jamie/DevOpenDDS/ACE_wrappers/lib

3. 执行时,提示以下错误,

 

 是perl没有找到$DDS_ROOT/bin/PerlDDS里面的Run_Test.pm模块,只需要在.bashrc或者profile现有的环境变量里,最后加入一行export PERL5LIB=$DDS_ROOT/bin/PerlDDS,告诉perl本地Perl模块的搜索路径就可以。

TAO+DDS Environment
export ACE_ROOT=/home/jamie/DevOpenDDS/ACE_wrappers
export TAO_ROOT=$ACE_ROOT/TAO
export DDS_ROOT=home/jamie/DevOpenDDS/OpenDDS
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

4. 出现以下问题,可以把DemoIDL_Export.h和Demo.mwc删掉,重新生成和编写。

 

5. /Publisher成功启动,./Subscriber发现不了可能是防火墙没关,通过以下命令关闭防火墙即可。

systemctl stop firewalld.service            #停止firewall
systemctl disable firewalld.service        #禁止firewall开机启动

 

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jamie.T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值