检测Perl
如果系统中没有Perl,需要额外安装,不过ubuntu22.04上貌似已经集成了。
执行命令如下:
perl -v
ACE+TAO和OpenDDS安装
下载
ACE+TAO下载地址:ACE+TAO
OpenDDS下载地址:OpenDDS
注意:
ACE+TAO下载选择FULL版本
Linux下选择*.tar.gz格式
然后开始解压:
udo tar -zxvf ACE+TAO-7.0.6.tar.gz -C /opt
sudo tar -zxvf OpenDDS-3.20.tar.gz -C /opt
在/opt目录下已存在ACE_wrappers和OpenDDS-3.13.2两个文件夹,修改其权限:
cd /opt
sudo chmod 777 -R ACE_wrappers/
sudo chmod 777 -R OpenDDS-3.20/
环境变量配置
执行命令:
sudo vim /etc/profile
在文件末尾添加以下内容:
# ACE+TAO+DDS Environment
export ACE_ROOT=/opt/ACE_wrappers
export TAO_ROOT=$ACE_ROOT/TAO
export DDS_ROOT=/opt/OpenDDS-3.20
export PATH=$ACE_ROOT/bin:$DDS_ROOT/bin:$PATH
export LD_LIBRARY_PATH=$ACE_ROOT/lib:$DDS_ROOT/lib:$LD_LIBRARY_PATH
注:修改文件后要想马上生效还要运行# source /etc/profile
不然只能在下次重进此用户时生效.
配置config.h
执行命令如下:
cd /opt/ACE_wrappers/ace
vim config.h
添加内容如下:
#include "ace/config-linux.h"
配置Platform_macros.GNU
执行命令如下:
cd /opt/ACE_wrappers/include/makeinclude
vim platform_macros.GNU
添加内容如下:
include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU
编译(实验使用版本,但是有些问题)
ACE编译
cd $ACE_ROOT
make clean //清除上次的make命令所产生文件,第一次编译可以不运行
make
TAO编译
cd $TAO_ROOT
make clean //清除上次的make命令所产生文件,第一次编译可以不运行make
make
DDS编译
cd $DDS_ROOT
./configure //DDS配置,有的帖子没有缺少这一步,后面编译会出问题
make clean //清除上次的make命令所产生文件,第一次编译可以不运行make
make
检测是否安装成功
这里我们可以使用源码中提供的脚本进行验证:
cd $DDS_ROOT/example/DCPS/Messenger_Imr
perl ./run_test.pl
运行时候报错:
进入对应的路径进行重亲make
,发现了原因:
···
make[1]: 离开目录“/opt/ACE_wrappers/TAO/orbsvcs/ImplRepo_Service”
make[1]: 进入目录“/opt/ACE_wrappers/TAO/orbsvcs/ImplRepo_Service”
ImR_Locator will not be built due to the following missing library: ACEXML_Parser ACEXML
···
因为编译时候东西太多,而且时间比较长,所以这部分很容易被忽略。
既然找到了问题,那么就来看看如何解决问题了。
在/opt/ACE_wrappers
的目录下有个文件夹./ACEXML/parser/parser/
这里放着ACEXML_Parser 相关的源码。
看来是这部分的源码没有被编译,我们直接在./ACEXML/
里执行编译:
make
编译成功后,进入到/opt/ACE_wrappers/TAO/orbsvcs/ImplRepo_Service
路径继续执行编译:
make
接下来我们就可以继续执行测试了,执行后发现又有了新的问题:
应该是编译的时候没有全部编译完全,上面的对上面的编译手顺做一个修改(最下面的最终版本)。
继续解决问题,可以在目录/opt/ACE_wrappers/TAO/orbsvcs/ImplRepo_Service
找到对应的库文件,说明库已经被生成了:
那就是环境变量的问题了。
在lib
目录下也找到了对应的库:
最后发现是我自己电脑环境以前安装过FastDDS,修改.bashrc
文件,添加过:
export LD_LIBRARY_PATH=/home/xiaoqing/Fast-DDS/install/lib
将上文中的针对LD_LIBRARY_PATH
的相关设定给改写了。
这里我们改回来后再次验证, 又出现新的问题:
Oh,My GOD. 没完没了。
继续看一下这个没有被找到的publisher和subscriber。
在目录/opt/OpenDDS-3.20/examples/DCPS/Messenger_Imr
下可以看到他们的源码,但是没有make文件,所以并没有被编译成可执行文件,这有点奇怪。
再看了下源码路径下有个/opt/OpenDDS-3.20/DevGuideExamples/DCPS/Messenger.minimal
里面也是测试例子,猜测是因为版本的问题路径修改了,这里我们再次执行测试例子:
cd $DDS_ROOT/DevGuideExamples/DCPS/Messenger.minimal
perl ./run_test.pl
可以执行了。_
大功告成。
执行结果:
/opt/OpenDDS-3.20/bin/DCPSInfoRepo -ORBDebugLevel 10 -ORBLogFile DCPSInfoRepo.log -o repo.ior
TAO (5187|5187) - Completed initializing the process-wide service context
TAO (5187|5187) - Default ORB services initialization begins
TAO (5187|5187) - ORBInitializer_Registry::register_orb_initializer 0 @0x55b7eea5ac70
TAO (5187|5187) - ORBInitializer_Registry::register_orb_initializer 1 @0x55b7eea53e60
TAO (5187|5187) - Default ORB services initialization completed
TAO (5187|5187) - We are the default 3.0.6 ORB ...
TAO (5187|5187) - Initializing the orb-specific services
/opt/OpenDDS-3.20/DevGuideExamples/DCPS/Messenger.minimal/publisher -ORBDebugLevel 10 -DCPSDebugLevel 10 -ORBLogFile publisher.log
/opt/OpenDDS-3.20/DevGuideExamples/DCPS/Messenger.minimal/subscriber -ORBDebugLevel 10 -DCPSDebugLevel 10 -DCPSTransportDebugLevel 6 -ORBLogFile subscriber.log
Msg: subject Review
subject_id 99
from Comic Book Guy
count 0
text Worst. Movie. Ever.
Msg: subject Review
subject_id 100
from Comic Book Guy
count 1
text Worst. Movie. Ever.
Msg: subject Review
subject_id 101
from Comic Book Guy
count 2
text Worst. Movie. Ever.
Msg: subject Review
subject_id 102
from Comic Book Guy
count 3
text Worst. Movie. Ever.
Msg: subject Review
subject_id 103
from Comic Book Guy
count 4
text Worst. Movie. Ever.
Msg: subject Review
subject_id 104
from Comic Book Guy
count 5
text Worst. Movie. Ever.
Msg: subject Review
subject_id 105
from Comic Book Guy
count 6
text Worst. Movie. Ever.
Msg: subject Review
subject_id 106
from Comic Book Guy
count 7
text Worst. Movie. Ever.
Msg: subject Review
subject_id 107
from Comic Book Guy
count 8
text Worst. Movie. Ever.
Msg: subject Review
subject_id 108
from Comic Book Guy
count 9
text Worst. Movie. Ever.
Subscriber received 10 samples
INFO: /opt/OpenDDS-3.20/bin/DCPSInfoRepo being killed.
编译(最终版本)
因为编译时间太长,所以这部分我没有亲自验证了:
cd /opt/ACE_wrappers/
make
DDS编译
cd $DDS_ROOT
./configure //DDS配置,有的帖子没有缺少这一步,后面编译会出问题
make clean //清除上次的make命令所产生文件,第一次编译可以不运行make
make