交叉编译g2o至ARM架构

交叉编译g2o至ARM架构

1.下载交叉编译链

PC机为x86架构,目标平台为ARM架构,首先需要安装x86至ARM平台的交叉编译链。需要注意的是,编译链上C库的版本需要和目标平台上的C库版本兼容。我起初参考其他博客直接apt-get工具链,之后交叉编译会报libc的问题,所以最好查看目标平台的C库版本后去linaro官网下载对应版本的交叉编译链并解压。我这里下载的版本为gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu。

2.安装CMake

Opencv以及许多库需要通过CMake创建MakeFile,直接sudo apt-get install cmake。

3.下载g2o源码

在home目录创建文件夹compile_g2o_2,g2o源码下载并解压至compile_g2o_2文件夹内,重命名为arm_g2o。进入arm_g2o目录,新建build文件夹。

4.修改CMakeLists.txt

1.设置交叉编译链,在第三行处添加:

#START
SET(CMAKE_SYSTEM_NAME Linux)
SET(TOOLCHAIN_DIR "/home/andrew/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu")

set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-g++)
set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-gcc)
SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_DIR} ${TOOLCHAIN_DIR}/aarch64-linux-gnu/include ${TOOLCHAIN_DIR}/aarch64-linux-gnu/lib)
#END

2.注释掉FIND_PACKAGE(OpenMP)一段:

#FIND_PACKAGE(OpenMP)
#SET(G2O_USE_OPENMP OFF CACHE BOOL "Build g2o with OpenMP support (EXPERIMENTAL)")
#IF(OPENMP_FOUND AND G2O_USE_OPENMP)
#  SET (G2O_OPENMP 1)
#  SET(g2o_C_FLAGS "${g2o_C_FLAGS} ${OpenMP_C_FLAGS}")
#  SET(g2o_CXX_FLAGS "${g2o_CXX_FLAGS} -DEIGEN_DONT_PARALLELIZE ${OpenMP_CXX_FLAGS}")
#  MESSAGE(STATUS "Compiling with OpenMP support")
#ENDIF(OPENMP_FOUND AND G2O_USE_OPENMP)

3.去掉两处-march=native
4.注释掉Find Eigen3一段:

# Find Eigen3
#SET(EIGEN3_INCLUDE_DIR ${G2O_EIGEN3_INCLUDE})
#FIND_PACKAGE(Eigen3 3.1.0 REQUIRED)
#IF(EIGEN3_FOUND)
#  SET(G2O_EIGEN3_INCLUDE ${EIGEN3_INCLUDE_DIR} CACHE PATH "Directory of Eigen3")
#ELSE(EIGEN3_FOUND)
#  SET(G2O_EIGEN3_INCLUDE "" CACHE PATH "Directory of Eigen3")
#ENDIF(EIGEN3_FOUND)

修改为:

SET(EIGEN3_INCLUDE_DIR "/home/andrew/compile_eigen3_2/arm_eigen3/install/include/eigen3")
SET(G2O_EIGEN3_INCLUDE ${EIGEN3_INCLUDE_DIR})

这里,/home/andrew/compile_eigen3_2/arm_eigen3/install/include/eigen3为交叉编译后的eigen路径,可以参考以前的博客。

5.build目录下cmake …

进入build目录下打开终端,输入cmake …生成Makefile

6.build目录下make

进入build目录下打开终端,输入make进行编译
交叉编译g2o至ARM架构_第1张图片

7.lib目录下查看libg2o.so

进入lib目录即可看到libg2o.so动态库,用file命令查看信息:
在这里插入图片描述

8.test

目前没找到简单的test程序。

你可能感兴趣的:(交叉编译)