ARM架构Linux操作系统上C++版本的CycloneDDS代码的CMake编译详细过程(交叉编译工具链)

1 cmake(build编译目录的创建与进入过于简单此处省略)

在根目录下创建build-arm文件夹,进入之后

Linux命令行输入:cmake -DCMAKE_TOOLECHAIN_FILE=/home/ubuntu/Documents/install_ARM/arm.cmake -DCMAKE_INSTALL_PREFIX=../install_DDS_ARM -DENABLE_SSL=NO -DCMAKE_PREFIX_PATH=/home/bunutu/Dcouments/ARM_C_CycloneDDS/cyclonedds-master/install_DDS_ARM ..

ARM架构下的C++版本编译时需要指定四个方面:
-DCMAKE_TOOLECHAIN_FILE:指定arm.cmake的存放地址
-DCMAKE_INSTALL_PREFIX:指定安装路径
-DENABLE_SSL:指定是否启用SSL
-DCMAKE_PREFIX_PATH:指定C语言的安装路径,C++的编译需要C中安装的库支持

请添加图片描述

2 make编译(指令等同于cmake --build .)

请添加图片描述

请添加图片描述

请添加图片描述

3 安装

请添加图片描述

4 debug版本与testing构建

4.1 ARM下的Gtest安装与搭建

在进行这一步之前,其实已经处理了一部分问题,其中最为典型的问题就是:could not find GTest

虽然我们在usr/local/lib下面已经安装过Gtest了,已经将Gtest的库文件放在下面了,但它是X86的,我们现在需要ARM架构的

请参考上一篇文章

Gtest在ARM平台上的离线搭建(让Gtest编译安装成功之后的可执行文件.so变成ARM下的—ARM aarch64)(实用篇)

4.2 idlc_generate失效解决

Linux终端输入命令后报错如下图所示:

请添加图片描述

和之前的C版本中的情况相同(本栏目中C版本在ARM架构下的编译),ARM架构下idlc_generate失效问题

将该指令注释掉

CMakeLists.txt文件修改

请添加图片描述

要清楚拷贝的是哪里的.cpp和.hpp文件(拷贝的是C++版本X86架构上编译的)
在X86架构./build/src/ddscxx/tests下面

拷贝过来以后需要放在同一目录tests下面

并且要将全部拷贝过来的.cpp文件中第一行引入头文件的地址改掉,因为现在全部都在同一目录下,所以路径不需要了直接放上头文件即可

请添加图片描述

请添加图片描述

请添加图片描述

查看一下

请添加图片描述

请添加图片描述

请添加图片描述

4.3 重新构建Debug成功

4.4 make编译出错解决

请添加图片描述
文件放置位置不对,全部放在tests文件包下面

首先要将所有涉及到的头文件和源文件都放在同一个目录下面

每个cpp文件的include头文件引入程序有错,要将全部cpp文件中引入hpp的路径删除,只留下头文件即可,因为已经都在同意目录下面了。

请添加图片描述

如下图所示全是头文件引入的路径不对报错

请添加图片描述

是将所有从X86_CPPtests下面拷贝过来的文件cpp中必须全部将hpp头文件引入的路径去掉,因为全部在同一目录下

修改完成重新来一遍debug构建和编译,完美通过!!!
请添加图片描述

5 roundtrip示例构建与运行(只产生可执行文件,不再运行,运行很简单直接./后面跟上文件名即可)

有许多值得注意的点!!!

5.1 修改CMakeLists.txt文件以应对idlc_generate指令在ARM架构上失效问题

除了注释掉idlc_generate指令之外一些其他的修改选项细节见下图

请添加图片描述

5.2 通过idlc文件手动生成RoundTrip.cpp和RoundTrip.hpp文件

这个文件可以通过两种当时来搞定

第一就是直接从X86_CPP_……那个文件中直接拷贝过来(就是自己之前在X86架构上编译时产生的源文件和头文件)

第二种方法就是: ./idlc -l cxx RoundTrip.idl指令来产生

请添加图片描述

5.3 cmake指令(参数有.cmake地址、ARM_C安装地址、SSL是否开启)

linux终端输入:
cmake -DCMAKE_TOOLCHAIN_FILE=/home/ubuntu/Documents/install_ARM/arm.cmake -DENABLE_SSL=NO -DCMAKE_PREFIX_PATH=/home/ubuntu/Documents/ARM_C_CycloneDDS/cyclonedds-master/install_DDS_ARM/lib/cmake/CycloneDDS ..

该指令中包括了arm.cmake文件放置的地址;c语言版本的cyclonedds在ARM架构上编译安装的地址,因为要去找该安装位置的lib/cmake/CycloneDDS下面去找CycloneDDSConfig.cmake 和 cyclonedds-config.cmake,此时一定要指向的是ARM架构下的,当然X86架构下的也会生成,但是文件格式不对

请添加图片描述
此时显示找不到:
CycloneDDS-CXXConfig.cmake
cyclonedds-cxx-config.cmake

这个时候需要引入正确,虽然X86架构编译安装C++时也会产生,但是此处一定要指向ARM架构下的,否则文件格式不对。
如果此处你引入了X86架构下面的文件的话cmake也能通过(显示缺少C的就在运行一次之前的代码即可)

请添加图片描述

但是make编译过不去,右下图所示:

请添加图片描述

正确的写法应该是第一次报错:此时显示找不到:CycloneDDS-CXXConfig.cmakecyclonedds-cxx-config.cmake时应该输入ARM下的C++安装地址,如下图所示:

请添加图片描述

然后再编译的时候就可以通过

5.4 make编译并查看执行文件类型

终端输入:make

右下图所示我们可以看到两个可执行文件,并且通过file命令可以看到该执行文件的类型是ARM下的

请添加图片描述
此处就正式完结撒花咯~~~

哦哦,下一篇总结一下整体的编译注意事项和学习心得

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

江南霹雳堂雷家雷无桀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值