Fast-DDS的代码编译及源码安装
环境条件:ubuntu 20.04
1.Java的版本:openjdk-8
2.Gradle的版本:6.4
给出官网的地址:https://fast-dds.docs.eprosima.com/en/latest/
本次安装是基于源码的linux平台安装,其他平台或者其他方式可以自行研究,本文主要目的是总结安装和构建代码过程中出现的问题以及解决方法。
官网提示的安装内容,本次操作是基于cmake的方式进行编译以及安装
安装编译工具
sudo apt install cmake g++ python3-pip wget git
由于系统默认的安装网址镜像连接很慢并且打不开,这是由于ubuntu20.04 LTS系统默认源source.list文件中http://cn.archive.ubuntu.com/ubuntu/
采用国内的镜像地址:http://mirrors.aliyun.com/ubuntu
并执行
sudo apt --fix-broken install
sudo apt-get update可解决安装问题
安装FastDDS依赖的库
Asio and TinyXML2 libraries,Asio 是一个用于网络和低级 I/O 编程的跨平台 C++ 库,它提供了一致的异步模型。TinyXML2 是一个简单、小巧、高效的 C++ XML 解析器。
在 Ubuntu 上使用以下命令:
sudo apt install libasio-dev libtinyxml2-dev
编译安装Foonathan memory,执行命令
git clone https://github.com/eProsima/foonathan_memory_vendor.git
mkdir foonathan_memory_vendor/build &&cd foonathan_memory_vendor/build
在build的目录下执行:
cmake .. -DCMAKE_INSTALL_PREFIX=/home/Fast-DDS/install -DBUILD_SHARED_LIBS=ON
执行:cmake --build . --target install
编译安装Fast CDR,执行命令
git clone https://github.com/eProsima/Fast-CDR.git
mkdir Fast-CDR/build && cd Fast-CDR/build
在build目录下执行:
cmake … -DCMAKE_INSTALL_PREFIX=/home/Fast-DDS/install
执行:cmake --build . --target install
编译安装Fast-DDS
git clone git@github.com:eProsima/Fast-DDS.git
执行mkdir build && cd build
在build目录下执行:执行cmake … -DCMAKE_INSTALL_PREFIX=~/dds/fast-dds/install -cmake … -DCMAKE_INSTALL_PREFIX=/home/Fast-DDS/install
执行:cmake --build . --target install
等待结束即完成
存在一个install的目录,是Fast-DDS的编译出来的库文件
安装java的版本
可以安装指定版本:见后面
openjdk-8可以满足当前环境
sudo apt install default-jre -y(这种方式默认安装最新的导致最后编译失败)
sudo apt install default-jdk -y(这种方式默认安装最新的导致最后编译失败)
查看java的版本:
java -version
安装gradle
官网安装地址:https://gradle.org/install/
我这里采用的是手动安装,下载了最新的二进制软件包:
Step 1. Download the latest Gradle distribution
Step 2. Unpack the distribution
因为Fast-DDS-Gen在安装的时候,依赖于java的的版本以及gradle的版本,所以此时安装的是最新版本,后面会出现编译问题,所以先不要着急安装,先看文档
Step 3. Configure your system environment
export PATH=$PATH:/home/Fast-DDS/gradle-7.5.1/bin
注意:环境变量根据自己的路径配置
查看版本:gradle -v
暂时先不考虑java的版本以及gradle的版本,极大概率会出现安装不上,后面会修复gradle的版本为6.0
编译和安装Fast-DDS-Gen
依次执行命令,从git上下载源码:
git clone --recursive https://github.com/eProsima/Fast-DDS-Gen.git
cd Fast-DDS-Gen
gradle assemble
前面说过,由于java的版本以及gradle的版本过高导致Fast-DDS-Gen安装失败:
查看java的版本并卸载重新安装:
java -version
首先,检查是安装的哪个 OpenJDK包
dpkg --list | grep -i jdk
移除 openjdk包
apt-get purge openjdk*
卸载 OpenJDK 相关包:
apt-get purge icedtea-* openjdk-*
安装java的openjdk-8版本
sudo apt install openjdk-8-jdk
在/home/Fast-DDS/Fast-DDS-Gen的目录下再次安装:
错误的原因是由于gradle的版本与fast-dds-gen的版本不匹配,使用./gradlew assemble的方式,使用gen自己匹配gradlew的版本。
添加环境变量:
export PATH=/home/Fast-DDS/Fast-DDS-Gen/scripts:$PATH
测试安装是否成功:
新建文件夹,并创建文件idl;
输入终端命令:
fastddsgen hello.idl
安装完成
Gtest的编译和安装
执行命令:
git clone https://github.com/google/googletest
预编译在build目录下
cmake ..
编译make
安装sudo make install
测试
g++ temp.cpp -lgtest -lpthread