C++版本的Cyclonedds源码在Linux(X86平台)系统上编译生成可执行文件的详细步骤,此为X86平台的编译,后续会有ARM平台C、C++版本的Cyclonedds源码编译
此系列总共有四篇,分别为C、C++版本的Cyclonedds在X86、ARM平台上进行编译
1 远程仓库CycloneDDS(C++版本)源码下载
git clone https://github.com/eclipse-cyclonedds/cyclonedds.git
注:可从远程仓库git clone
,也可以直接进入github官网下载,下图是从官网直接下载的截图
2 创建并进入build目录
C++版本的Cyclonedds源码下载完成以后,进入根目录下
Linux终端输入:mkdir build
build目录:用于存放编译过程中产生的各种文件
Linux终端输入: cd ./build
3 指定安装路径与前缀
Linux终端输入:cmake -D CMAKE_INSTALL_PREFIX=<install-location> -D CMAKE_PREFIX_PATH = <cyclonedds-install-location> ..
其中<install-location>
是C++的安装位置,是可以自定义,用于存放install
时的一些文件
<cyclonedds-install-location>
是C的安装位置,是之前编译C版本时所指定的位置(这个位置是有一些模糊,有前辈愿意解惑的话,请留下评论)
例如:cmake -D CMAKE_INSTALL_PREFIX=.../install_DDS
其中,install_DDS
在源码根目录下新建的目录,用于存放执行install
安装命令时生成的文件
CMAKE_PREFIX_PATH = <cyclonedds-install-location>
,其中cyclonedds-install-location
定位到C版本的编译安装位置,假设C的安装位置在/home/ubuntu/Documents/test_clone/test001/cyclonedds-master/install_dds
,那么此
处的步骤见下图所示:
为防止报错,建议CMAKE_INSTALL_PREFIX和CMAKE_PREFIX_PATH一起使用
显示configuring done/generating done表示成功!
打开此目录,会生成一些文件,见下图
4 编译 cmake --build.
Linux终端输入:cmake --build .
点的目的是因为MakeFile文件在同级目录,此为编译时的重要文件。与make效果相同,cmake --build .的形式可以跨平台,不需要考虑生成器类型。如果生成器是 Ninja ,那么直接使用make就不生效了。
编译开始:
显示100%并且不报错表明编译完成
5 编译完成后进行安装
Linux终端输入:cmake --build . --target install
安装完成之后会将所有的的内容都拷贝到自己选择的安装路径下,即
在此目录下输入ls -a
指令,会出现四个目录:lib、bin、include、share,其中share文件有时产生不成功,无妨!
6 版本构建并编译
通过配置构建出debug版本并且进行编译
Linux终端输入:cmake -D CMAKE_BUILD_TYPE=Debug -D BUILD_TESTING=ON ..
其中CMAKE_BUILD_TYPE=Debug
构建debug版本
BUILD_TESTING=ON
构建测试套件(需要CUnit单元测试框架工具存在)
报错:not find CUnit缺少测试套件
因为cmake -D BUILD_TESTING=ON ..
需要CUnit单元测试工具
在上一篇中CycloneDDS(C版本)开源代码在Linux(X86平台)系统上编译生成可执行文件的详细步骤中已经成功安装了CUnit,可以参考。
但是此处的报错是:
could not GTest(missing:GTEST_LIBARARY GTEST_MAIN_LIBRARY)
6.1 Could not find GTest错误解决方法之gtest安装
需要给linux系统安装gtest的单元测试工具,gtest是google的一套用于编写C++测试的框架,构建debug版本就必须存在gtest
6.1.1 googletest下载
https://github.com/google/googletest 可直接官网下载
将下载好的压缩文件传输到linux系统上
这里放在/usr/src/目录下
6.1.2 sudo mkdir build创建文件
在usr目录下新建文件夹需要root权限,可以i使用sudo
6.1.3 sudo cmake … 产生MakeFile文件
6.1.4 sudo make 产生库文件(直接产生.a 静态库文件)
产生4个静态库我呢见如下图所示:
安装完成之后将这四个静态库文件(.a文件)复制到/usr/local/lib下:
使用指令:sudo cp -r ./*.a /usr/local/lib
完成之后进行安装
6.1.5 sudo make install安装
安装完成之后,再次linux终端输入下面命令指定debug版本:
cmake -D CMAKE_BUILD_TYPE=debug -D BUILD_TESTING=ON …
如图显示则证明命令执行成功。
6.2 编译构建的版本
在Linux终端输入: cmake --build .进行编译,显示结果如下:
表明新构建的版本编译成功!
最后显示100% ,并且最后一行显示:Build target ddscxx_tests
6.3 ctest进行单元测试
Cmake和Ctest可以帮助我们进行项目的构建与测试,前面已经完成了项目的构建,接下来使用ctest进行单元测试。此过程会稍微慢一点。
在linux终端输入:ctest
,显示结果如下
如图所示,100% tests passed!证明单元测试全部通过,此步骤完成。
7 构建和运行往返实例(编译example 有个特别需要注意的点)
此步骤的目的是:构建和运行测量延迟的示例程序
cyclonedds里面已经有现成的实例供我们参考,在根目录下的example目录下面,我们打开此目录,此目录下有CMakeLists.txt文件以及一些其他的文档,我们需要在此目录(example目录)下编译构建出RoundtripPong
和RoundtripPing
两个可执行文件来。
RoundtripPing / RoundtripPong
,对应examples/roundtrip
,功能为尽最大能力ping pong,pong端接收后将数据返回,ping端指定数据包大小,并记录传输数据包个数及延时分布。
我们可以看到cyclonedds-cxx-master包下的example目录下有很多文件,包括CMakeLists.txt等,其中我们要构建的可执行文件所需要的源文件等就在examples/roundtrip
接下来,在example/roundtrip目录下新建build目录
在build目录下终端输入cmake ..
来此产生MakeFile文件,用于make编译,但是输入cmake ..
之后会报错,如下:(图片中是c版本出现的问题截图,不影响,c++也是这个影响,问题是一样的)
此时,需要在cmake ..
指令中指定cyclonedds的安装路径,指令与显示结果如下:
cmake -D CMAKE_PREFIX_PATH=<安装dds目录的绝对路径> ..
这里与前面是对应的,请注意,在第四步中我们指定了安装路径前缀
cmake -D CMAKE_INSTALL_PREFIX= <install-location>..
在这一步也是同样的,cmake -D CMAKE_PREFIX_PATH= <install-location>..
如果在第四步中自己指定了安装路径,此处一定要写正确。
写正确之后运行结果应该如下图所示:
(请注意这里写的路径还是c语言编译时候的安装路径)
此时我们打开build目录,已经产生了MakeFile文件,终端命令行输入 cmake --build .
进行编译,完成之后产生cxxRoudtripPong
和cxxRoudtripPing
两个可执行文件如下图所示:
上述步骤完成之后,在example/build目录下重新打开一个终端命令行窗口将响应ping的应用程序启动:
linux终端输入:./cxxRoudtripPong
在另一个终端上启动即将发送的ping程序:
Linux终端输入:./cxxRoudtripPing
显示如下图所示内容,则表示成功。