Skip to content

LLVM交叉编译配置指南

前段时间捣鼓交叉编译,发现llvm用来做交叉编译非常合适,只需要3个核心参数

核心编译参数

LLVM/Clang提供了简洁的交叉编译方案,主要使用以下三个参数:

  1. --target - 定义目标平台三元组
  2. --gcc-toolchain - 设置目标的GCC编译器路径
  3. --sysroot - 指定目标系统的rootfs路径

CMake配置示例

以下是一个完整的CMake交叉编译配置模板,适用于从Termux环境交叉编译到ARM64 glibc目标系统:

cmake

# Set the target system
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

# Set the target triple
set(TARGET_TRIPLE aarch64-linux-gnu)

# Specify the cross compilers
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_ASM_COMPILER clang)

# Set the sysroot path.
# YOU MUST CHANGE THIS to the root of your aarch64-linux-gnu toolchain/sysroot.
set(CMAKE_SYSROOT /data/data/com.termux/files/home/gcc/aarch64-linux-gnu/libc)

# Set the path to the GCC toolchain for Clang to use
# YOU MUST CHANGE THIS to the root of your aarch64-linux-gnu GCC toolchain.
set(GCC_TOOLCHAIN_PATH /data/data/com.termux/files/home/gcc)

# Set compiler flags
set(CMAKE_C_FLAGS "--target=${TARGET_TRIPLE} --sysroot=${CMAKE_SYSROOT} --gcc-toolchain=${GCC_TOOLCHAIN_PATH}" CACHE STRING "C compiler flags")
set(CMAKE_CXX_FLAGS "--target=${TARGET_TRIPLE} --sysroot=${CMAKE_SYSROOT} --gcc-toolchain=${GCC_TOOLCHAIN_PATH} -stdlib=libstdc++" CACHE STRING "C++ compiler flags")
set(CMAKE_ASM_FLAGS "--target=${TARGET_TRIPLE} --sysroot=${CMAKE_SYSROOT} --gcc-toolchain=${GCC_TOOLCHAIN_PATH}" CACHE STRING "ASM compiler flags")

# Where to look for the target environment
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})

# Adjust the find behavior to search only in the 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)

配置说明

必须修改的路径

  • CMAKE_SYSROOT: 需要设置为aarch64-linux-gnu工具链的libc目录路径
  • GCC_TOOLCHAIN_PATH: 需要设置为aarch64-linux-gnu GCC工具链的根目录路径

关键配置项

  • 目标三元组: aarch64-linux-gnu 指定了ARM64架构和GNU libc环境
  • 编译器选择: 使用Clang系列编译器进行交叉编译
  • 标准库: C++使用libstdc++标准库(与GCC工具链兼容)

查找路径配置

配置了CMake在目标系统根目录下查找库文件、头文件和包,但在主机系统上查找程序。

使用说明

  1. 确保已安装LLVM/Clang编译器
  2. 准备好对应的GCC交叉编译工具链
  3. 修改上述配置中的路径指向您的实际工具链位置
  4. 使用CMake配置和构建项目

注意事项

  • 此配置适用于使用GCC-linaro工具链的情况,改名成了gcc
  • 确保目标工具链与Host系统的兼容性
  • 不同的目标架构需要调整相应的目标三元组
  • 有些项目用了汇编代码,所以汇编编译器也要设置交叉编译链
最近更新

Released under the MIT License.