给新手----编译VSOMEIP保姆级别教程
前言:当你学习了SOMEIP理论基础后,一定很希望上手实操一波吧,本文档以SOMEIP协议里比较成熟的VSOMEIP开源框架为例,带你从0到1实现开源框架的下载到上手,坐稳啦,开车!!!!
1. 下载源码:
在linux终端输入或者windows的minGW里输入:
git clone Gitee 极速下载/vsomeipGitee 极速下载/vsomeiphttps://gitee.com/mirrors/vsomeip.git
完成所有编译工作后的目录结构如下:

2. 必要包的安装:
由于linux版本之间有差异性,难以全部罗列,统一以ubuntu20.04举例说明:
请敲以下命令完成boost以及其他
| 代码 |
| sudo apt-get install libboost-system-dev libboost-thread-dev libboost-log-dev sudo apt-get install asciidoc source-highlight doxygen graphviz sudo apt-get install gcc g++ make |
3. 编译vsomeip:
进入vsomeip路径下。编译vsomeip库,请执行以下命令:
| 代码 |
| mkdir build
cd build
cmake ..
make
sudo make install |
完成所有工作后的记录如下:

4. 编译官方提供的helloworld测试案例(熟手跳过)
(可以参考官方关于helloworld案例的readme提示:../vsomeip/examples/hello_world/readme)
请cd 到/examples/hello_world路径下:执行同样的编译命令
| 代码 |
| mkdir build
cd build
cmake ..
make |
编译过程如下图所示:

5. 执行helloworld测试用例:
5.1 请注意,官方helloworld教程关于“Running Hello World Example”部分有误,需要按照以下方式修改:
把helloworld目录下的helloworld-local.json 复制到build目录里去。
给小白的提示:假设您现在处以 /vsomeip/examples/hello_world/build 路径下,请执行以下代码:
| 代码 |
| cp ../helloworld-local.json ./ |
复制完成后helloworld的build应该和我一样。如下图所示:

5.2 开两个终端,执行程序:(直接复制粘贴代码)
终端1运行 service端:
env VSOMEIP_CONFIGURATION=./helloworld-local.json \
VSOMEIP_APPLICATION_NAME=hello_world_service \
./hello_world_service
终端2运行 client端:
env VSOMEIP_CONFIGURATION=./helloworld-local.json \
VSOMEIP_APPLICATION_NAME=hello_world_client \
./hello_world_client
Tips:如果提示:Configuration module could not be loaded!请在../vsomeip/examples/hello_world/build路径下输入以下命令完成链接工作,再执行上述执行命令。
| 代码 |
| sudo ldconfig |
5.3 测试结果:
服务端:
2023-03-16 11:14:47.394718 [info] vSomeIP 3.3.0 | (default)
2023-03-16 11:14:57.400489 [info] vSomeIP 3.3.0 | (default)
2023-03-16 11:14:58.263600 [info] Application/Client 5555 is registering.
2023-03-16 11:14:58.264118 [info] Client [4444] is connecting to [5555] at /tmp/vsomeip-5555
2023-03-16 11:14:58.268696 [info] REGISTERED_ACK(5555)
2023-03-16 11:14:58.376506 [info] REQUEST(5555): [1111.2222:255.4294967295]
2023-03-16 11:14:58.387110 [info] RELEASE(5555): [1111.2222]
2023-03-16 11:14:58.388448 [info] Application/Client 5555 is deregistering.
2023-03-16 11:14:58.399715 [info] receive_cbk local_uds_client_endpoint: connection_reset/EOF/bad_descriptor
2023-03-16 11:14:58.496182 [info] Client [4444] is closing connection to [5555]
2023-03-16 11:15:03.385937 [info] STOP OFFER(4444): [1111.2222:0.0] (true)
2023-03-16 11:15:03.387130 [info] Stopping vsomeip application "hello_world_service" (4444).
客户端:
私人信息脱敏/someipCode/vsomeip/examples/hello_world/build$ env VSOMEIP_CONFIGURATION=./helloworld-local.json \
> VSOMEIP_APPLICATION_NAME=hello_world_client \
> ./hello_world_client
2023-03-16 11:14:58.257083 [info] Using configuration file: "./helloworld-local.json".
2023-03-16 11:14:58.257952 [info] Parsed vsomeip configuration in 0ms
2023-03-16 11:14:58.258019 [info] Configuration module loaded.
2023-03-16 11:14:58.258052 [info] Initializing vsomeip application "hello_world_client".
2023-03-16 11:14:58.258194 [info] Instantiating routing manager [Proxy].
2023-03-16 11:14:58.258368 [info] Client [5555] is connecting to [0] at /tmp/vsomeip-0
2023-03-16 11:14:58.258511 [info] Application(hello_world_client, 5555) is initialized (11, 100).
2023-03-16 11:14:58.258655 [info] Starting vsomeip application "hello_world_client" (5555) using 2 threads I/O nice 255
2023-03-16 11:14:58.259440 [info] shutdown thread id from application: 5555 (hello_world_client) is: 7f516931d700 TID: 78921
2023-03-16 11:14:58.260555 [info] io thread id from application: 5555 (hello_world_client) is: 7f5169bc0000 TID: 78919
2023-03-16 11:14:58.260802 [info] io thread id from application: 5555 (hello_world_client) is: 7f5168b1c700 TID: 78922
2023-03-16 11:14:58.262858 [info] create_local_server: Listening @ /tmp/vsomeip-5555
2023-03-16 11:14:58.263042 [info] Client 5555 (hello_world_client) successfully connected to routing ~> registering..
2023-03-16 11:14:58.263117 [info] Registering to routing manager @ vsomeip-0
2023-03-16 11:14:58.263629 [info] main dispatch thread id from application: 5555 (hello_world_client) is: 7f5169b1e700 TID: 78920
2023-03-16 11:14:58.268148 [info] Application/Client 5555 (hello_world_client) is registered.
2023-03-16 11:14:58.378331 [info] ON_AVAILABLE(5555): [1111.2222:0.0]
Sending: World
2023-03-16 11:14:58.379275 [info] Client [5555] is connecting to [4444] at /tmp/vsomeip-4444
Received: Hello World
2023-03-16 11:14:58.386383 [info] Stopping vsomeip application "hello_world_client" (5555).
2023-03-16 11:14:58.389704 [info] Application/Client 5555 (hello_world_client) is deregistered.
2023-03-16 11:14:58.390784 [info] Client [5555] is closing connection to [4444]
相关文章:
给新手----编译VSOMEIP保姆级别教程
前言:当你学习了SOMEIP理论基础后,一定很希望上手实操一波吧,本文档以SOMEIP协议里比较成熟的VSOMEIP开源框架为例,带你从0到1实现开源框架的下载到上手,坐稳啦,开车!!!&…...
MarkDown设置上下标
上标:$a^{2-5}$ 下标:$a_{n-1}$显示:结果 上标:a2−5a^{2-5}a2−5 下标:an−1a_{n-1}an−1 如果上下标中需要多个显示,需要用{}括起来,否则就像下面一样 上标:$a^2-5$ 下标&…...
Python批量爬取游戏卡牌信息
文章目录前言一、需求二、分析三、处理四、运行结果前言 本系列文章来源于真实的需求本系列文章你来提我来做本系列文章仅供学习参考阅读人群:有Python基础、Scrapy框架基础 一、需求 全站爬取游戏卡牌信息 二、分析 查看网页源代码,图片资源是否存在…...
什么是PCB走线的3W原则
在设计PCB的时候我们会经常说到3W原则, 它指的是两个PCB走线它们的中心间距不小于3倍线宽,这个W就是PCB走线的宽度。这样做的目的主要是为了减小走线1和走线2之间的串扰,一般对于时钟信号,复位信号等一些关键信号需要遵循3W原则。…...
计算机网络面试总结
计算机网络 1.计算机网络 2.计算机网络拓扑结构 3.计算机网络覆盖 4.时延 5.交换技术 6.单工、半双工、全双工 7.OSI模型 8.TCP/IP模型 9.物理层有哪些设备 10.数据链路层介质访问控制 11.数据链路层有哪些设备 12.数据链路层流量控制 13.数据链路层的三个基本问题和解决方法 1…...
VsCode SSH远程连接服务器【内网穿透公网连接】
文章目录1.前言2.VS code的安装和设置2.1 VS code的下载安装2.2 OpenSSH的启用2.3 为VS code配置ssh2.4 局域网内测试VS code的ssh连接2.5 Cpolar下载安装3.Cpolar端口设置3.1 Cpolar云端设置3.2 Cpolar本地设置4.公网访问测试5.结语1.前言 记得笔者小时候看电视,看…...
十八、动画与canvas
1.RequestAnimationFrame 早期定时动画 setTimeout和setInterval不能保证时间精度,第二个参数只能保证何时将代码添加到浏览器的任务队列 requestAnimationFrame(cb)的cb在浏览器重绘屏幕前调用 function updateProgress(){const div document.getElementById(d…...
自动化测试学习-Day4-selenium的安装和8种定位方法
哈喽,大家好! 本人21年毕业,软件工程专业,毕业后一直从事金融行业的软件测试。 希望大家一起见证一名卑微测试的成长之路。 目录 一、环境准备 1.浏览器下载 2.浏览器驱动下载 3.下载selenium 二、Selenium定位元素的8种方法…...
【Kubernetes】第二十五篇 - 布署 nodejs 后端项目(下)
一,前言 上一篇,介绍了部署后端项目之前,需要的准备的相关配置信息; 本篇,创建 Deployment、Service 完成后端项目布署; 二,解决 jenkins 安全问题 构建 docker 镜像之后,登录 do…...
贪心算法之区间问题总结
一、跳跃游戏跳跃游戏类的问题,不关心每一步怎么跳,只需要关心最大覆盖范围这里注意i是在当前最大可覆盖范围内遍历,如{2,1,0,1},就是在0~2范围内遍历,千万不能0~numsSize-1范围内遍历!!&#x…...
无线WiFi安全渗透与攻防(七)之WIFI07-WEP-wifite自动化渗透WEP加密
WIFI07-WEP-wifite自动化渗透WEP加密 1.wifite介绍 wifite是一款自动化wep、wpa以及wps破解工具,不支持windows和osx。wifite的特点是可以同时攻击多个采用wep和wpa加密的网络。wifite只需简单的配置即可自动化运行,期间无需人工干预。 目前支持任何li…...
震撼,支持多模态模型的ChatGPT 4.0发布了
最近几个月,互联网和科技圈几乎ChatGPT刷屏了,各种关于ChatGPT的概念和应用的帖子也是围绕在周围。当去年年底ChatGPT发布的那几天,ChatGPT确实震撼到了所有人,原来AI还可以这么玩,并且对国内的那些所谓的人工智能公司…...
IDEA常用插件列表
一 背景 IDEA常用插件列表,用来提供工作效率。你都安装了吗 IntelliJ IDEA 默认安装并提供了非常多的工具,比如 Maven Integration、Markdown support、SSH Remote Run 等。其中有很多好用,但是不为人知的工具。 二 插件列表 阿里代码规约…...
比df更好用的命令!
大家好,我是良许。 对于分析磁盘使用情况,有两个非常好用的命令:du 和 df 。简单来说,这两个命令的作用是这样的: du 命令:它是英文单词 disk usage 的简写,主要用于查看文件与目录占用多少磁…...
【Git使用学习】记录学习过程(1)
安装就省略了,安装结果如下。 Git Bash:这是一个模拟Linux环境的命令行工具,可以使用Git的所有功能。Git GUI:这是一个图形化界面的工具,可以方便地执行Git的常用操作。Git CMD:这是一个Windows命令行工具&…...
K_A18_001 基于STM32等单片机采集MQ2传感参数串口与OLED0.96双显示
K_A18_001 基于STM32等单片机采集MQ2传感参数串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCMQ2传感参模块1.2、STM32F103C8T6MQ2传感参模块五、基础知识学习与相关…...
【云原生·Docker】常用命令
目录 🍁1、管理命令 🍁2、帮助命令 🍁3、镜像命令 🍁4、容器命令 🍂4.1.查看容器 🍂4.2.创建容器 🍂4.3.删除容器 🍂4.4.拷贝文件 🍂4.5.查看容器IP 🍁5、部署…...
户外露营储能电源芯片CSU3AF10
户外露营的项目有很多,随着户外储能电源的发展,越来越多的电子产品可以在户外使用,也不用担心因为在户外时间过长而手机或者其他电子产品电量耗尽。户外储能电源可保证人们随时随地的用电需求,同时也可以满足家电炊具的供电需求&a…...
无线WiFi安全渗透与攻防(八)之WEP-Hirte渗透WEP加密
WEP-渗透WEP新思路–Hirte 1.Hirte介绍 Hirte是破解无线网络WEP Key的一种攻击类型 只要客户端设备(笔记本电脑,手机等)连接过的无线网络,那些WIFI即使是不在攻击者范围内也都能被破解,因为该wifi的WEP密钥和配置文…...
前端常考面试题整理
display:none与visibility:hidden的区别 这两个属性都是让元素隐藏,不可见。两者区别如下: (1)在渲染树中 display:none会让元素完全从渲染树中消失,渲染时不会占据任何空间;visibility:hidden不会让元素…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
