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文件见本博客附件,解压即可。
































标签: none

评论已关闭