<请不要转载,仅用于个人学习>
1. 安装依赖boost相关文件
vsomeip实现依赖于boost,这里选择的是boost_1.76.0版本。
boost源码及二进制文件下载地址
这个安装的时候需要2170M左右的空间,安装后结果如下:
lib64-msvc-14.2下是boost库。
2. 编译vsoemip
2.1 下载vsomeip源码
https://github.com/COVESA/vsomeip,下载最新版本;
打开VS的command,依据电脑选择32/64位;
2.2 安装VS编译工具链
请留意vsoemip支持的VS工具链的版本(当前最高支持到v142),否则做一下工具链确认或切换,步骤如下:
工具 -> 单个组件 -> SDK、库和框架 -> 可以看到已经安装的一些组件版本;
若是没有所需版本,就选一个v142或更低的版本(ATL x86和x64)进行安装;
2.3 执行编译
进入到代码目录,新建build目录并进入,执行如下指令:
cmake -G “Visual Studio 17 2022” … -DBOOST_ROOT=D:\Projects\boost\boost_1_76_0 -DBoost_USE_STATIC_LIBS=ON
编译完成之后,我们可以看到build下的VS工程文件,如下所示:
[图片]
打开项目后,对ALL_BUILD执行重新生成,至正常编译结束算是完成。
2.4 运行example实例
以response-sample.exe为例,将其与vsomeip3的dll文件及JSON配置文件放在一起(也可将dll库路径设置到环境变量中),当前目录启动cmd,进行如下执行(可以写到bat里双击执行):
#设置环境变量
@ECHO OFF
SETLOCAL
#添加boost和vsomeip库路径
set PATH=%PATH%;D:\Projects\vsomeip\vsomeip-master\build\Debug;D:\Projects\boost\boost_1_76_0\lib64-msvc-14.2
set VSOMEIP_CONFIGURATION=D:\Projects\vsomeip\vsomeip-master\build\examples\Debug\response.json
set VSOMEIP_APPLICATION_NAME=response-sample
#查看环境变量
#set VSOMEIP_CONFIGURATION
#启动程序
response-sample.exe
正常启动过程如下:
response.json文件(unicast是自己电脑的ip地址):
{
"unicast" : "192.168.3.78",
"logging" :
{
"level" : "trace",
"console" : "true",
"file" : { "enable" : "false", "path" : "/tmp/vsomeip.log" },
"dlt" : "false"
},
"applications" :
[
{
"name" : "response-sample",
"id" : "0x1277"
},
{
"name" : "request-sample",
"id" : "0x1344"
}
],
"services" :
[
{
"service" : "0x1234",
"instance" : "0x5678",
"unreliable" : "30509",
"multicast" :
{
"address" : "224.224.224.245",
"port" : "30490"
},
"events" :
[
{
"event" : "0x0777",
"is_field" : "true",
"update-cycle" : 2000
},
{
"event" : "0x0778",
"is_field" : "true",
"update-cycle" : 0
},
{
"event" : "0x0779",
"is_field" : "true"
}
],
"eventgroups" :
[
{
"eventgroup" : "0x4455",
"events" : [ "0x777", "0x778" ]
},
{
"eventgroup" : "0x4465",
"events" : [ "0x778", "0x779" ],
"is_multicast" : "true"
},
{
"eventgroup" : "0x4555",
"events" : [ "0x777", "0x779" ]
}
]
}
],
"routing" : "response-sample",
"service-discovery" :
{
"enable" : "true",
"multicast" : "224.224.224.245",
"port" : "30490",
"protocol" : "udp",
"initial_delay_min" : "10",
"initial_delay_max" : "100",
"repetitions_base_delay" : "200",
"repetitions_max" : "3",
"ttl" : "3",
"cyclic_offer_delay" : "2000",
"request_response_delay" : "1500"
}
}
3. BOOST的Windows编译
boost资源地址
方法一:
在上方下载地址中,对应版本binaries/下选择下载二进制文件直接进行安装就可以了。
方法二:
下载源码,解压,进入源码目录,按如下步骤操作:
3.1 执行脚本生成b2
vc142 指定VS工具链版本(但是这个这样指定似乎没用,因为从下面的报错中可以看出,它默认依然去用了143的工具,但是打包及命名还是142,这个原因待查)
bootstrap.bat vc142
3.2 编译生成库
当前源码位置:D:\Projects\boost\boost_1_76_0
b2.exe --help 可以查看指令及参数的使用说明;
库名称相关的几个配置,如下:
link= static : 静态库。 生成的库文件名称以 “lib”开头
link= shared : 动态库。生成的库文件名称无“lib”开头
threading= mult : 支持多线程。 生成的库文件名称中包含 “-mt”
variant=release 生成的库文件名称不包含 “-gd”
variant= debug 生成的库文件名称包含 “-gd”
runtime-link= static 生成的库文件名称包含 “-s”
runtime-link= shared 生成的库文件名称不包含 “-s”
b2.exe stage --stagedir="D:\Projects\boost\boost_1_76_0\lib64-msvc-14_2" --toolset=msvc-14.2 address-model=64 link=static runtime-link=shared threading=multi --with-system #仅编译system库,全部编译修改为--build-type=complete
在执行把b2指令集时,会出现如下报错,是因为下图位置缺少vcvarsall.bat文件,我们在VS安装目录下找到这个文件将其拷贝过来,就可以正常编译了。
最终我们可以看到库已生成:
到此我们发现让vsomeip去做依赖的时候报错了,是因为编译的文件不完整,后来查看官方方法一文件夹下boost_1_79_0-64bitlog.txt,重新修改编译指令b2.exe -j4 --without-mpi --build-dir=D:\Projects\boost\boost_1_76_0\bin.v2 --stage-libdir=lib64-msvc-14.2 --build-type=complete toolset=msvc-14.2 address-model=64 architecture=x86 stage
重新进行编译(这里编译到最后,发现skiped 30个文件,是python/zlib/*之类的在本地没有编过,但是当前生成的库文件是可以满足vsoemip编译依赖需求的,特殊的几个库没编译过的原因待查);
我们基于指令编译得到的库去编vsoemip,到vsomeip/build下执行cmake -G "Visual Studio 17 2022" .. -DBOOST_ROOT="D:\Projects\boost\boost_1_76_0" -DBOOST_LIBRARYDIR="D:\Projects\boost\boost_1_76_0\lib" -DBOOST_INCLUDEDIR="D:\Projects\boost\boost_1_76_0\include" -DBoost_USE_STATIC_LIBS=ON
,build下便生成vsomeip编译相关文件,点击vsoemip的vsomeip.sln打开工程,编译vsomeip。
基于Linux编译vsomeip - test
安装googletes
sudo apt-get install googletes
编译MakeFile脚本
cmake -DGTEST_ROOT=/usr/src/googletest/ -DENABLE_SESSION_HANDLING_CONFIG=1 ..
GTEST_ROOT指定gtest安装位置,ENABLE_SESSION_HANDLING_CONFIG使能E2E依赖。
test编译参考
<请不要转载,请仅用于个人学习>