• 基于Windows编译someip


    <请不要转载,仅用于个人学习>

    vsoemip源码

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    正常启动过程如下:
    在这里插入图片描述

    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"
        }
    }    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在执行把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

    下载gtest源码

    #PROJECT_SOURCE_DIR的用法围殴PROJECT_SOURCE_DIR/test,编译时设置的不对,这里重新设置了一下
    cmake -DGTEST_ROOT=/home/ubuntu/googletest -DPROJECT_SOURCE_DIR=/home/ubuntu/vsomeip .. 
    make configuration-test
    
    • 1
    • 2
    • 3

    <请不要转载,仅用于个人学习>

  • 相关阅读:
    Elasticsearch
    mathlive在vue中使用
    2024暑期实习八股笔记
    云原生k8s的声明式哲学
    【mycat】mycat水平分表
    云服务器部署k8s集群
    YoloV8目标检测与实例分割——目标检测onnx模型推理
    【笔记】元素水平滑动(松手查看更多、滑动回弹)
    guava之RateLimiter
    二百零三、Flume——Flume实时采集数据频率为1s的高频率Kafka数据直接写入ODS层表的HDFS文件路径下
  • 原文地址:https://blog.csdn.net/qq_37748525/article/details/126265465