一、下载
本文使用:boost1.65;vsomeip3.4.10
-
下载vsomeip源码:https://github.com/GENIVI/vsomeip.git
-
下载相应版本的boost源码包:
-
Boost C++ Libraries - Browse /boost-binaries at SourceForge.net
注:建议直接使用二进制安装boost,手动编译容易出错
二、boost编译
自动编译:
头文件:boost
库文件:lib64-msvc-14.1
手动编译:
1、打开VS的命令行窗口
在开始菜单的VS菜单项里打开“Developer Command Prompt for VS2022”,进入boost目录
cd /d C:\Users\GW00272301\Desktop\FirstAA-windows\boost_1_69_0\boost_1_69_0
2、命令行窗口执行.\bootstrap.bat
3、运行 .\b2 命令来进行编译,编译命令如下
- 1)修改 boost根目录下的 project-config.jam 文件,如果用的是 VS2022,则可以将里面的内容修改成:
import option ;
using msvc : 14.3 : "E:\program\Microsoft Visual Studio2022\Community\VC\Tools\MSVC\14.32.31326\bin\Hostx64\x64\cl.exe" ;
option.set keep-going : false ;
- 2)运行 .\b2 命令来进行编译
b2.exe install toolset=msvc-14.3 runtime-link=shared threading=multi --build-dir=build --build-type=complete --prefix=./stage -j8
参数解释:
toolset:使用的VS的版本为143(vs2022)
without:不编译python
prefix:编译后生成的位置
三、检测boost库是否安装
在 Windows 下编译 Boost 库后,你可以通过以下步骤来检测编译是否成功:
1、打开 Visual Studio,创建一个新的空白项目(例如 Console Application)。
2、导入引用的boost库的include和lib ,参考:
BOOST库配置到VS2022(保姆级教程)_boost v141在vs2022怎么用-CSDN博客
3、在项目中的源文件中,包含 Boost 库的头文件并尝试使用其中的功能函数。例如,在源文件中添加以下代码:
cppCopy Code#include <boost/version.hpp>
#include <iostream>
int main() {
std::cout << "Boost version: " << BOOST_LIB_VERSION << std::endl;
return 0;
}
4、构建并运行该项目。如果编译和链接过程没有错误,并且程序能够成功输出 Boost 的版本号,则说明 Boost 库编译成功。
另外,你还可以通过以下方法之一来检查 Boost 库编译成功与否:
-
检查编译输出:在 Visual Studio 中查看编译输出窗口,确保没有任何关于 Boost 库的编译错误信息。
-
检查生成的库文件:确认在编译过程中生成了正确的 Boost 库文件(如 .lib 或 .dll 文件)。
如果以上步骤中没有出现错误,并且你能够正常使用 Boost 库的功能,那么说明你已经成功编译 Boost 库。
四、编译vsomeip
参考链接:
1、在E:\vsomeip-master下创建build目录,打开命令行进入E:\vsomeip-master\build执行:
cmake -G “Visual Studio 17 2022” .. -DBOOST_ROOT=E:\Boost-Vsomeip\boost_1_65_0 -DBoost_USE_STATIC_LIBS=ON
2、执行成功后在build目录下便生成了相应的vs工程:
3、点击vsomeip.sln打开工程,右键ALL_BUILD->生成,等待编译完成
4、此时在build\debug中已经生成了相应的库文件:
五、编译、调试helloworld
(一)Windows环境下
1、编译:
(1)选择其中一个cmakelists.txt文件,加入hello_world文件,编译出hello_world可执行文件
(2)点击vsomeip.sln打开工程,右键ALL_BUILD和example->生成,等待编译完成
(3)点击打开vSomeIPHelloWorld.sln工程,右键ALL_BUILD生成,等待编译完成
2、运行:
(1)配置文件:将目录下的文件vsomeip-master\examples\hello_world\helloworld-local.json复制到hello_world_service.exe所在目录,更改IP地址为本机IP
(2)以hello_world_service.exe为例,当前目录启动VS终端,执行如下bat(也可双击执行,使用时,去掉注释内容):
#设置环境变量
@ECHO OFF
SETLOCAL
#添加boost和vsomeip库路径
set PATH=%PATH%;E:\Boost-Vsomeip\vsomeip-master\build\Debug;E:\Boost-Vsomeip\boost_1_65_0\lib64-msvc-14.1
set VSOMEIP_CONFIGURATION=E:\Boost-Vsomeip\vsomeip-master\build\examples\hello_world\Debug\helloworld-local.json
set VSOMEIP_APPLICATION_NAME=hello_world_service
#查看环境变量
#set VSOMEIP_CONFIGURATION
#启动程序
hello_world_service.exe
注:每次执行前,手动删除环境变量TEMP下的vsomeip.lck文件
(3)运行结果
(二)Linux下:
1、编译
(1)在CMakeLists.txt文件中添加hello_world
(2)在vsomeip源码根目录
cmake ..
make
sudo make install
make example(编译exmaple中的源码)
2、运行
(1)配置文件:将目录下的文件vsomeip-master\examples\hello_world\helloworld-local.json复制到hello_world_service可执行文件所在目录,更改IP地址为本机IP
(2)开启两个终端,分别执行如下指令(若出现段错误,可先导入vsomeip库的环境变量,再执行如下指令)
HOST1:
VSOMEIP_CONFIGURATION=./helloworld-local.json \
VSOMEIP_APPLICATION_NAME=hello_world_service \
./hello_world_service
HOST1:
VSOMEIP_CONFIGURATION=./helloworld-local.json \
VSOMEIP_APPLICATION_NAME=hello_world_client \
./hello_world_client
(3)运行结果
(三)Linux与Windows(s&c)
注:必须使用有线网络通信!!!
1、配置文件,更改"service-discovery" 字段
Linux:IP改为本机地址
{
"unicast": "10.20.20.28",
"logging" :
{
"level" : "debug",
"console" : "true",
"file" : { "enable" : "false", "path" : "/tmp/vsomeip.log" },
"dlt" : "false"
},
"applications": [
{
"name": "hello_world_service",
"id": "0x4444"
}
],
"services": [
{
"service": "0x1111",
"instance": "0x2222",
"unreliable": "30509"
}
],
"routing": "hello_world_service",
"service-discovery" :
{
"enable" : "true",
"multicast" : "224.0.0.11",
"port" : "12330",
"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"
}
}
Windows:IP改为本机地址
{
"unicast": "10.20.20.15",
"logging" :
{
"level" : "debug",
"console" : "true",
"file" : { "enable" : "false", "path" : "/tmp/vsomeip.log" },
"dlt" : "false"
},
"applications": [
{
"name": "hello_world_client",
"id": "0x5555"
}
],
"services": [
{
"service": "0x1111",
"instance": "0x2222",
"unreliable": "30509"
}
],
"routing": "hello_world_client",
"service-discovery" :
{
"enable" : "true",
"multicast" : "224.0.0.11",
"port" : "12330",
"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"
}
}
2、Linux改为桥接模式,不改为桥接也可以,必须使Linux和windows在同一网段
3、运行结果
六、错误及解决
1、编译boost
以下问题参考链接:Win10 + VS2019 编译安装 Boost - 知乎
(1)问题一:报错:'cl' 不是内部或外部命令,也不是可运行的程序。
解决:
将 cl 命令的位置添加到系统的环境变量中,我这里 VS 被安装到了 E 盘中,需要将以下内容添加到 Path 环境变量中:
E:\program\Microsoft Visual Studio2022\Community\VC\Tools\MSVC\14.32.31326\bin\Hostx64\x64
(2)问题二:执行.\b2命令之后可能会报如下错误:
error: msvc initialization: parameter 'version' inconsistent
error: no value was specified in earlier initialization
error: an explicit value is specified now
解决方法:
修改 boost根目录下的 project-config.jam 文件,如果用的是 VS2022,则可以将里面的内容修改成:
import option ;
using msvc : 14.3 : "E:\program\Microsoft Visual Studio2022\Community\VC\Tools\MSVC\14.32.31326\bin\Hostx64\x64\cl.exe" ;
option.set keep-going : false ;
vs版本查看:
2、编译vsomeip
(1)为什么有的目录下cmd能找到cmake有的目录找不到?
1)安装cmake
Win10 下的 CMake的安装(详细版)_win10 cmake安装-CSDN博客
2)重启电脑 使环境变量生效
(2)ALL_BUILD->生成时,报错:
解决:
boost版本没用对,导致vsomeip找不到对应目录下的头文件 ,使用vsomeip的cmakelists.txt里规定的boost版本(一般为boost1.55-1.65)
3、编译example报错
1)问题
解决:删除环境变量TEMP下的vsomeip.lck文件
4、其他:
1、无线网络下,Windows的wireshark可以抓到hello-world的SD报文,但是无法通信:改为同一网段&使用有线网络
2、有线网络下,Windows的wireshark抓不到MyfirstAa-provider的SD报文:起routingmanagerd,routing字段改为routingmanagerd