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.cmake
、cyclonedds-cxx-config.cmake
时应该输入ARM下的C++安装地址,如下图所示:
然后再编译的时候就可以通过
5.4 make编译并查看执行文件类型
终端输入:make
右下图所示我们可以看到两个可执行文件,并且通过file
命令可以看到该执行文件的类型是ARM下的
此处就正式完结撒花咯~~~
哦哦,下一篇总结一下整体的编译注意事项和学习心得