CommonAPI C++ SOME/IP Runtime For Windows

CommonAPI C++ SOME/IP Runtime For Windows

Tags
CommonAPI
C++
SOME/IP
Windows
Runtime
Published
Published May 12, 2022
Author
wapeasy

背景介绍:

CommonAPI C++ SOME/IP Runtime 是一套基于vsomeip和CommonAPI运行的框架,给app层可以提供丰富的接口进行数据通信,现在让我们来实现win平台的库编译。

调查:

老规矩,先行查看CMakeLists.txt
if (MSVC) # Boost find_package( Boost 1.55 COMPONENTS system thread log REQUIRED ) if(Boost_FOUND) if(Boost_LIBRARY_DIR) MESSAGE( STATUS "Boost_LIBRARY_DIR not empty using it: ${Boost_LIBRARY_DIR}" ) else() if(BOOST_LIBRARYDIR) MESSAGE( STATUS "Boost_LIBRARY_DIR empty but BOOST_LIBRARYDIR is set setting Boost_LIBRARY_DIR to: ${BOOST_LIBRARYDIR}" ) set(Boost_LIBRARY_DIR ${BOOST_LIBRARYDIR}) endif() endif() else()
可以发现,依赖Boost库,我们在前些篇章已经做成了Boost的库,具体的方法参考:
vsomeip For Windows
someip是在车机领域使用最广泛的一种中间件协议,其中vsomeip做为最出名的开源方案,被广泛的使用,但是其使用方法中只简单的给出了linux平台的编译方法,并没有给出win平台的使用方法,查看编译脚本发现,其实已经集成了win平的编译,只是没有给出教程,所以本篇应运而生。 通过以上发现有关于win平台的判断,但是需要注意的是判断中将 cygwin给排除了,所以为了顺利编译还是使用win平台的vs套件进行编译,防止一些意外发生。 通过以上可以看出,编译vsomeip还需要Threads库和boost库,Threads库应该在vs套件中已经集成,Boost库需要自己准备 需要提前准备Boost库,并且版本不能低与1.55 我们选择的Boost版本是1.69.0,因为 sourceforge 上下载量最高👾,并且这里我们遵循了编译库的基本原则,永远不要用最新版本,不要问为什么,千万别用!!! 解压后使用vs套件自带的命令行窗口 VS2015 x64 x86兼容工具 编译Boost过程如果遇到 vcruntime140d.dll等dll找不到的情况,可以去 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\debug_nonredist\x86\Microsoft.VC140.DebugCRT\ 拷贝过来 当编译完成后Boost的库会在 C:\Project\Boost这个路径,我们编译 vsomeip 的时候会用到 同样使用vs套件自带的命令行窗口 VS2015 x64 x86兼容工具 在编译之前,需要改造一下原版的Cmakelist.txt,添加下面的路径,让生成makefile时可以找到boost的库文件 注意:在 find_package( Boost 1.55 COMPONENTS system thread filesystem REQUIRED ) 之前追加 vsomeip3-cfg.dll vsomeip3-cfg.lib vsomeip3-e2e.dll vsomeip3-e2e.lib vsomeip3-sd.dll vsomeip3-sd.lib vsomeip3.dll vsomeip3.lib CommonAPI C++ SOME/IP Runtime For Windows CommonAPI C++ SOME/IP Tools For Windows
vsomeip For Windows
if ("${USE_INSTALLED_COMMONAPI}" STREQUAL "ON") FIND_PACKAGE(CommonAPI 3.2.0 REQUIRED CONFIG NO_CMAKE_PACKAGE_REGISTRY) else() FIND_PACKAGE(CommonAPI 3.2.0 REQUIRED CONFIG NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH) endif()
依赖CommonAPI Core的库,具体的实现参考:
find_package (vsomeip3 3.1.0 REQUIRED)
依赖vsomeip的库,具体实现参考:
vsomeip For Windows
someip是在车机领域使用最广泛的一种中间件协议,其中vsomeip做为最出名的开源方案,被广泛的使用,但是其使用方法中只简单的给出了linux平台的编译方法,并没有给出win平台的使用方法,查看编译脚本发现,其实已经集成了win平的编译,只是没有给出教程,所以本篇应运而生。 通过以上发现有关于win平台的判断,但是需要注意的是判断中将 cygwin给排除了,所以为了顺利编译还是使用win平台的vs套件进行编译,防止一些意外发生。 通过以上可以看出,编译vsomeip还需要Threads库和boost库,Threads库应该在vs套件中已经集成,Boost库需要自己准备 需要提前准备Boost库,并且版本不能低与1.55 我们选择的Boost版本是1.69.0,因为 sourceforge 上下载量最高👾,并且这里我们遵循了编译库的基本原则,永远不要用最新版本,不要问为什么,千万别用!!! 解压后使用vs套件自带的命令行窗口 VS2015 x64 x86兼容工具 编译Boost过程如果遇到 vcruntime140d.dll等dll找不到的情况,可以去 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\debug_nonredist\x86\Microsoft.VC140.DebugCRT\ 拷贝过来 当编译完成后Boost的库会在 C:\Project\Boost这个路径,我们编译 vsomeip 的时候会用到 同样使用vs套件自带的命令行窗口 VS2015 x64 x86兼容工具 在编译之前,需要改造一下原版的Cmakelist.txt,添加下面的路径,让生成makefile时可以找到boost的库文件 注意:在 find_package( Boost 1.55 COMPONENTS system thread filesystem REQUIRED ) 之前追加 vsomeip3-cfg.dll vsomeip3-cfg.lib vsomeip3-e2e.dll vsomeip3-e2e.lib vsomeip3-sd.dll vsomeip3-sd.lib vsomeip3.dll vsomeip3.lib CommonAPI C++ SOME/IP Runtime For Windows CommonAPI C++ SOME/IP Tools For Windows
vsomeip For Windows
至此准备工作已经完成,以上就是编译过程依赖的库
由于之前编译做成的库比较零散,所以让我们先把它们集合起来,并在cmake时设定相应路径,如下:
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX="C:/Project/capicxx-someip-runtime" -DBOOST_ROOT="C:/Project/Boost" -DCommonAPI_ROOT="C:/Project/capicxx-core-runtime" -Dvsomeip3_ROOT="C:/Project/vsomeip3" ../
如果你足够的幸运,继续执行:
nmake nmake install
编译完成后,你会得到:
notion image
以上的编译内容会发布在: