SOMEIP源码分别在X86和ARM架构上的编译详细过程(含samples/E01HelloWorld)

前言

SOMEIP的原理相较于DDS来讲要简单些,但是SOMEIP的编译要比DDS编译难一点

首先梳理清楚一点,DDS的编译与SOMEIP的编译存在很大的不同,不能用编译DDS的那一套来编译SOMEIP

本篇主要整理SOMEIP源码和其HelloWorld demo分别在x86和arm架构上的编译,不管在什么平台上编译SOMEIP的编译需要依赖于C++的拓展库 Boost 。所以开始之前需要先分别编译安装x86_64和aarch64(ARM)下的Boost库文件。


Boost分别在X86和ARM下的编译安装(为SOMEIP编译做准备)

Boost库分别在X86和ARM上的安装可以参考下文,看过的都在赞喔
ubuntu上安装boost库为SOMEIP的X86和ARM下编译做准备(编译两种版本)


cmake进行编译选项设置(准备x86.cmake和arm.cmake文件用于指定两种架构下boost的安装位置)

假设x86架构的boost安装在/usr/local/boost/install/include、lib
而arm架构的boost则将安装的include、lib头文件和库文件跟一些arm架构库文件一并放在/install_ARM下面

arm.cmake:(x86.cmake的格式相同,首先屏蔽交叉编译工具链,并且改成x86架构下的boost安装地址,指向其安装包中的头文件和库文件

# 设置目标系统名称为Linux系统
SET(CMAKE_SYSTEM_NAME Linux)
# 设置目标系统的处理器架构为ARM架构
SET(CMAKE_SYSTEM_PROCESSOR x86_64)
# 将此处的安装位置改成自己的交叉编译工具链所解压放置的位置

# SET(TOOLCHAIN_DIR "/usr/local/arm/aarch64--glibc--stable-2022.03-1")

# 分别指定arm-gcc和arm-g++交叉编译器的位置
#也是编译器为ARM架构下的编译器
# ET(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-linux-gcc)


# 制定boost库的安装位置
set( BOOST_ROOT        /usr/local/boost/install/ )
# 安装boost时候include的路径(不要写下一级目录:include/boost)
set( BOOST_INCLUDEDIR  /usr/local/boost/install/include/)
set( BOOST_LIBRARY_DIR  /usr/local/boost/install/lib )


# 设置编译的版本为debug版本。如果要编译realse版本,直接写realse即可
 set(CMAKE_BUILD_TYPE Debug)

处理CMakeLists.txt文件以成功进行源码编译

SOMEIP的源码编译里面需要先将 文档 相关的语句全部注释掉,打开CMakeLists.txt将报错信息中涉及doxygen
的指令全部屏蔽,非常重要的一点要不然本地编译过不去

执行cmake指令

分别在x86 arm架构中执行:

x86:cmake -DCMAKE_INSTALL_PREFIX=../install_someip_x86 -DCMAKE_TOOLCHAIN_FILE=/home/ubuntu/Documents/install_ARM/x86.cmake ..

arm:cmake -DCMAKE_INSTALL_PREFIX=../install_someip_arm -DCMAKE_TOOLCHAIN_FILE=/home/ubuntu/Documents/install_ARM/arm.cmake ..

报错信息如下:someip中出现的错误X86和ARM相同的,目前没有发现不同的报错,所以下面图示有些是build-x86,有些事build-arm不要紧,问题的解决方案是一样的

请添加图片描述
显示几个文件不存在,没关系就在对应的位置通过touch指令新建三个文件,此错误X86和ARM下都是一样的,两种架构下分别在对应位置touch上空文档即可。

所以在X86和ARM架构上源码编译的第一步,也即cmake编译选项设置及cmake指令执行这里,只有两个注意之处,首先新建几个空文件,并且将MC艾克Lists.txt里面的全部关于doxygen的内容全部注释掉即可。虽然会有很多警告但是cmake配置编译选项是可以过的。

请添加图片描述
请添加图片描述

make编译

因为前面已经将两个需要处理的点处理明白了,所以此处无障碍,只是编译的时候有很多warning,但不会报错,make顺利完成

请添加图片描述
请添加图片描述

make install安装

执行此指令,将会让此程序安装在cmake时指定的install_prefix路径下

次安装路径下的lib中库文件后面需要依赖

该步骤没有任何出问题的地方,不赘述啦

请添加图片描述

x86和ARM架构下SOMEIP中的HelloWorld编译

cmake编译选项设置及cmake指令执行

首先分别在 x86和ARM架构下源码的根目录下创建build_x86、build_arm,cd进入,并且进行编译选项设置且执行指令

此处x86和ARM下的在cmake时不会报错,如下图所示:

分别执行下面语句:

x86:cmake -DCMAKE_TOOLCHAIN_FILE=<x86.cmake存放的位置加上该文件> ..

arm:cmake -DCMAKE_TOOLCHAIN_FILE=<arm.cmake存放的位置加上该文件> ..请添加图片描述

请添加图片描述

make编译

make编译的时候出现错误,显示:

/usr/bin/ld: cannot find -lCommonAPI-SomeIP collect2: error: ld returned 1 exit status make[2]: *** [CMakeFiles/E01HelloWorld-someip.dir/build.make:117: libE01HelloWorld-someip.so] Error 1 make[2]: Leaving directory '/home/ubuntu/Documents/X86_CPP_SOMEIP/distack-someip/samples/E01HelloWorld/build-x86' make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/E01HelloWorld-someip.dir/all] Error 2 make[1]: Leaving directory '/home/ubuntu/Documents/X86_CPP_SOMEIP/distack-someip/samples/E01HelloWorld/build-x86' make: *** [Makefile:133: all] Error 2
但是检查了一番之后发现,CommonAPI-SomeIP库都在呢,而且路径也对

请添加图片描述

但是在make编译的时候总时出现如下的错误:
请添加图片描述
因此需要修改一下CMakeLists.txt文件,如下所示:
请添加图片描述
然后就可以成功进行编译,在编译过程中还是会出现很warning,但是不会报错,无碍。

完成之后ll查看文件,如下图所示,证明成功。

请添加图片描述
总结:

SOMEIP的编译,总体来讲需要动三个点:
1、注释所有与doxygen相关的指令语句

2、新建几个空文件,为了能够顺利完成编译

3、改动CMakeLists.txt文件中link_directories

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

江南霹雳堂雷家雷无桀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值