当前位置:   article > 正文

基于Windows编译vsomeip_vsomeip编译

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,则可以将里面的内容修改成:
  1. import option ;
  2. using msvc : 14.3 : "E:\program\Microsoft Visual Studio2022\Community\VC\Tools\MSVC\14.32.31326\bin\Hostx64\x64\cl.exe" ;
  3. 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 库的头文件并尝试使用其中的功能函数。例如,在源文件中添加以下代码:

  1. cppCopy Code#include <boost/version.hpp>
  2. #include <iostream>
  3. int main() {
  4. std::cout << "Boost version: " << BOOST_LIB_VERSION << std::endl;
  5. return 0;
  6. }

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(也可双击执行,使用时,去掉注释内容):
  1. #设置环境变量
  2. @ECHO OFF
  3. SETLOCAL
  4. #添加boost和vsomeip库路径
  5. set PATH=%PATH%;E:\Boost-Vsomeip\vsomeip-master\build\Debug;E:\Boost-Vsomeip\boost_1_65_0\lib64-msvc-14.1
  6. set VSOMEIP_CONFIGURATION=E:\Boost-Vsomeip\vsomeip-master\build\examples\hello_world\Debug\helloworld-local.json
  7. set VSOMEIP_APPLICATION_NAME=hello_world_service
  8. #查看环境变量
  9. #set VSOMEIP_CONFIGURATION
  10. #启动程序
  11. 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库的环境变量,再执行如下指令)
  1. HOST1:
  2. VSOMEIP_CONFIGURATION=./helloworld-local.json \
  3. VSOMEIP_APPLICATION_NAME=hello_world_service \
  4. ./hello_world_service
  5. HOST1:
  6. VSOMEIP_CONFIGURATION=./helloworld-local.json \
  7. VSOMEIP_APPLICATION_NAME=hello_world_client \
  8. ./hello_world_client
(3)运行结果

(三)Linux与Windows(s&c)

注:必须使用有线网络通信!!!

1、配置文件,更改"service-discovery" 字段

Linux:IP改为本机地址
  1. {
  2. "unicast": "10.20.20.28",
  3. "logging" :
  4. {
  5. "level" : "debug",
  6. "console" : "true",
  7. "file" : { "enable" : "false", "path" : "/tmp/vsomeip.log" },
  8. "dlt" : "false"
  9. },
  10. "applications": [
  11. {
  12. "name": "hello_world_service",
  13. "id": "0x4444"
  14. }
  15. ],
  16. "services": [
  17. {
  18. "service": "0x1111",
  19. "instance": "0x2222",
  20. "unreliable": "30509"
  21. }
  22. ],
  23. "routing": "hello_world_service",
  24. "service-discovery" :
  25. {
  26. "enable" : "true",
  27. "multicast" : "224.0.0.11",
  28. "port" : "12330",
  29. "protocol" : "udp",
  30. "initial_delay_min" : "10",
  31. "initial_delay_max" : "100",
  32. "repetitions_base_delay" : "200",
  33. "repetitions_max" : "3",
  34. "ttl" : "3",
  35. "cyclic_offer_delay" : "2000",
  36. "request_response_delay" : "1500"
  37. }
  38. }
Windows:IP改为本机地址
  1. {
  2. "unicast": "10.20.20.15",
  3. "logging" :
  4. {
  5. "level" : "debug",
  6. "console" : "true",
  7. "file" : { "enable" : "false", "path" : "/tmp/vsomeip.log" },
  8. "dlt" : "false"
  9. },
  10. "applications": [
  11. {
  12. "name": "hello_world_client",
  13. "id": "0x5555"
  14. }
  15. ],
  16. "services": [
  17. {
  18. "service": "0x1111",
  19. "instance": "0x2222",
  20. "unreliable": "30509"
  21. }
  22. ],
  23. "routing": "hello_world_client",
  24. "service-discovery" :
  25. {
  26. "enable" : "true",
  27. "multicast" : "224.0.0.11",
  28. "port" : "12330",
  29. "protocol" : "udp",
  30. "initial_delay_min" : "10",
  31. "initial_delay_max" : "100",
  32. "repetitions_base_delay" : "200",
  33. "repetitions_max" : "3",
  34. "ttl" : "3",
  35. "cyclic_offer_delay" : "2000",
  36. "request_response_delay" : "1500"
  37. }
  38. }

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命令之后可能会报如下错误:

  1. error: msvc initialization: parameter 'version' inconsistent
  2. error: no value was specified in earlier initialization
  3. error: an explicit value is specified now

解决方法:

修改 boost根目录下的 project-config.jam 文件,如果用的是 VS2022,则可以将里面的内容修改成:

  1. import option ;
  2. using msvc : 14.3 : "E:\program\Microsoft Visual Studio2022\Community\VC\Tools\MSVC\14.32.31326\bin\Hostx64\x64\cl.exe" ;
  3. 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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/136776?site
推荐阅读
相关标签
  

闽ICP备14008679号