基于Windows编译vsomeip

一、下载

本文使用:boost1.65;vsomeip3.4.10

注:建议直接使用二进制安装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

参考链接:

Windows环境下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

  • 27
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值