基于sysroot实现交叉编译ROS/ROS2程序
1、编写交叉编译脚本: toolchain.cmake,主要是sysroot将ARM的依赖作为rootfs,内容如下:
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
# 编译器设置
set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++)
# Sysroot 设置
set(CMAKE_SYSROOT "/home/aarch64rootfs") # sysroot路径
set(CMAKE_FIND_ROOT_PATH "/home/aarch64rootfs" "/nfs/ros2_ts/install")
# 工作空间路径
set(WORKSPACE_INSTALL_DIR "/nfs/ros2_ts/install")
# 将工作空间添加到 CMake 前缀路径
list(APPEND CMAKE_PREFIX_PATH "${WORKSPACE_INSTALL_DIR}")
# 编译器标志 - 确保包含路径正确设置
#set(WORKSPACE_INSTALL_DIR "/nfs/ros2_ts/install")
set(CMAKE_C_FLAGS "--sysroot=${CMAKE_SYSROOT} -I${WORKSPACE_INSTALL_DIR}/include -I${WORKSPACE_INSTALL_DIR}/include/nav2_msgs")
set(CMAKE_CXX_FLAGS "--sysroot=${CMAKE_SYSROOT} -I${WORKSPACE_INSTALL_DIR}/include -I${WORKSPACE_INSTALL_DIR}/include/nav2_msgs")
set(CMAKE_EXE_LINKER_FLAGS "--sysroot=${CMAKE_SYSROOT}")
# 查找规则
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
# Python 设置
set(CMAKE_LIBRARY_PATH "${CMAKE_SYSROOT}/usr/lib/aarch64-linux-gnu")
set(PYTHON_INCLUDE_DIR "${CMAKE_SYSROOT}/usr/include/python3.10")
set(PYTHON_LIB_DIR "${CMAKE_SYSROOT}/usr/lib/aarch64-linux-gnu")
set(PYTHON_LIBRARIES "/usr/lib/aarch64-linux-gnu/libpython3.10.so")
set(AMENT_BUILD_PYTHON_BINDINGS OFF)
set(CMAKE_IGNORE_PATH /usr/lib/aarch64-linux-gnu /usr/local/lib)
2、应用
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=/toolchain.cmake ../
如果用ROS2的编译方法,则:
colcon build --cmake-args -DCMAKE_TOOLCHAIN_FILE=/toolchain.cmake
3、toolchain文件
toolchain.cmake文件见本博客附件,解压即可。
评论已关闭