庭中三千梨花树,再无一朵入我心
vsomeip 是 GENIVI 实现的开源 SOME/IP 库,由 C++ 编写,目前主要实现了 SOME/IP 的通信和服务发现功能,并在此基础上增加了一些安全机制。GENIVI是一个联盟组织,由 BMW 倡导,是汽车信息娱乐领域系统软件标准的倡导者,创建基于linux 系统的 IVI 软件平台和操作系统。GENIVI 倡导了很多开源软件项目,比如:DLT、CommonAPI C++、vSOMEIP。
1. 移植vsomeip前需要先移植vsomeip依赖库boost。
首先下载boost 库源码Boost Version Historyhttps://www.boost.org/users/history/
目前GreaterSnow使用的是1_65_1版本。
下载后执行以下命令:
GreaterSnow@GreaterSnow:~/test/boost_1_65_1$ tar -zxvf boost_1_65_1.tar.gz
GreaterSnow@GreaterSnow:~/test/boost_1_65_1$ sudo ./bootstrap.sh --without-libraries=atomic,chrono,context,coroutine,exception,graph,graph_parallel,mpi,wave --prefix=/home/greatersnow/test/boost_165_1/boostsdk
prefix: 要安装的目录
修改编译工具链为交叉编译工具链(project-config.jam)
using gcc : : aarch64-poky-linux-gcc --sysroot=/usr/src/atc-image-ivi-full/sysroots/aarch64-poky-linux ;
./bjam
./bjam install
2. 移植vsomeip
如果github使用时比较卡,则可以将该地址映射克隆到gitee在下载。
下载后执行以下命令:
1. 首先执行tar -zxvf解压,如果直接使用git clone拉取的代码可以略过此步。
2. 进入源码根目录
3. mkdir build 创建编译使用的目录
4. cd build
5. touch ../cross_compile.cmake
6. 向cross_compile.cmake文件中添加以下内容
set(CMAKE_SYSROOT "${SYSROOTS_DIR}")
set(BOOST_ROOT /home/greatersnow/test/boost_1_65_1/boostsdk)
set(Boost_INCLUDE_DIR /home/greatersnow/test/boost_1_65_1/boostsdk/include)
set(BOOST_LIBRARY /home/greatersnow/test/boost_1_65_1/boostsdk/lib)
set(Boost_LIBRARY_DIR /home/greatersnow/test/boost_1_65_1/boostsdk/lib)
#从来不在指定目录下查找工具程序
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
#只在指定目录下查找库文件
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
#只在指定目录下查找头文件
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
#头文件的路径
include_directories (
${SYSROOTS_DIR}/usr/include/
${SYSROOTS_DIR}/usr/include/libdrm/
${SYSROOTS_DIR}/usr/include/glib-2.0/glib/
${SYSROOTS_DIR}/usr/include/glib-2.0/
${SYSROOTS_DIR}/usr/lib64/glib-2.0/include/
)
link_directories(
${SYSROOTS_DIR}/usr/lib64
)
7. 注意!!!/home/greatersnow/test/boost_1_65_1为刚刚boost移植库的安装位置
8. cmake .. -DENABLE_SIGNAL_HANDLING=1 -DCMAKE_TOOLCHAIN_FILE=../cross_compile.cmake
9. make -j4 -j4或-j8依据自己电脑配置而定
移植时遇到的问题:
1. CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
新建一个空的11.cmake 文件 然后执行cmake时 添加参数 既cmake .. -DCMAKE_TOOLCHAIN_FILE=../11.cmake
2
CMake Error at CMakeLists.txt:47 (target_link_libraries):
Cannot specify link libraries for target " " which is not built by
this project.
-- Configuring incomplete, errors occurred!
检查下报错地方的书写格式,可能格式有问题
sh-4.4# ln -s libvsomeip3-cfg.so.3.1.20 libvsomeip3-cfg.so
sh-4.4# ln -s libvsomeip3-cfg.so.3.1.20 libvsomeip3-cfg.so.3
sh-4.4# ln -s libvsomeip3-e2e.so.3.1.20 libvsomeip3-e2e.so
sh-4.4# ln -s libvsomeip3-e2e.so.3.1.20 libvsomeip3-e2e.so.3
sh-4.4# ln -s libvsomeip3-sd.so.3.1.20 libvsomeip3-sd.so
sh-4.4# ln -s libvsomeip3-sd.so.3.1.20 libvsomeip3-sd.so.3
sh-4.4# ln -s libvsomeip3.so.3.1.20 libvsomeip3.so
sh-4.4# ln -s libvsomeip3.so.3.1.20 libvsomeip3.so.3
3 把需要的库放入开发板中,添加软连接后执行ldconfig