因为项目需要,使用dds中间件,于是对其进行调研,以fast-dds为例,进行学习笔记
采用系统:Ubuntu18.04
本次采用源码编译需要使用的包:
1.foonathan_memory_vendor
2.fast-cdr
3.fast-dds
4.fast-dds-gen
分别通过git获得,其中需要会出现连接github 无法访问的问题,可以这样操作:
git config --global url."https://gitclone.com/github.com/".insteadOf "https://github.com/"
然后再git clone相应的包,进行本地cmake安装,可以参考官方网站:3.1.4
3. 从源代码安装 Linux — 快速 DDS 2.7.0 文档 (eprosima.com)
简单记录过程:
创建fast-dds目录:
mkdir ~/Fast-DDS
获取foonathan_memory_vendor:
cd ~/Fast-DDS
git clone https://github.com/eProsima/foonathan_memory_vendor.git
mkdir foonathan_memory_vendor/build
cd foonathan_memory_vendor/build
cmake .. -DCMAKE_INSTALL_PREFIX=~/Fast-DDS/install -DBUILD_SHARED_LIBS=ON
cmake --build . --target install
获取fast-cdr:
cd ~/Fast-DDS
git clone https://github.com/eProsima/Fast-CDR.git
mkdir Fast-CDR/build
cd Fast-CDR/build
cmake .. -DCMAKE_INSTALL_PREFIX=~/Fast-DDS/install
cmake --build . --target install
获取fast-dds:
cd ~/Fast-DDS
git clone https://github.com/eProsima/Fast-DDS.git
mkdir Fast-DDS/build
cd Fast-DDS/build
cmake .. -DCMAKE_INSTALL_PREFIX=~/Fast-DDS/install
cmake --build . --target install
在编译过程中cmake的版本会过低,18.04更新的cmake为3.10左右,fast-dds需要3.16以上
可以进入cmake官网下载相应版本,我采用的是 cmake-3.16.6.tar.gz
解压后
cd cmake-3.16.6
./bootstrap
make
make install
如果本身的cmake版本很高,可以忽略这步。
如上,完成编译安装后需要添加环境:
gedit ~/.bashrc
添加:export LD_LIBRARY_PATH=/home/mkt/Fast-DDS/install/lib
注意改成自己的路径
编译成功后开始测试fast-dds的helloworld
定位地址~/Fast-DDS/Fast-DDS-master/examples/cpp/dds/HelloWorldExample
cd ~/Fast-DDS/Fast-DDS/examples/cpp/dds/HelloWorldExample
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=~/Fast-DDS/install
make
获得如下内容:
运行两终端,分别执行发布和订阅
./DDSHelloWorldExample publisher
./DDSHelloWorldExample subscriber
效果如上。
还可以使用IDL文件构建代码,需要安装fast-dds-gen
先安装依赖环境:
sudo apt install openjdk-8-jdk
参考官网执行如下操作:
cd ~~/Fast-DDS/
git clone --recursive https://github.com/eProsima/Fast-DDS-Gen.git
cd Fast-DDS-Gen
gradle assemble
一般会报错,找不到gradle,采用如下方式
./gradlew assemble
使用gen自己匹配gradlew的版本
成功后添加环境:
gedit ~/.bashrc
添加:export PATH=/home/mkt/Fast-DDS/Fast-DDS-Gen/scripts:$PATH
完成这些就可以使用fastddsgen来通过idl文件生成代码。
fastddsgen Helloworld.idl
在新路径下拷贝helloworld.idl,执行上述命令,得到如下文件:
综上,fast-dds的基本编译及使用都完成