You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows环境下无需WSL和Docker,使用LLVM与CMake交叉编译至Linux(Ubuntu)

在Windows上用LLVM+CMake交叉编译Linux(Ubuntu)程序(无WSL/Docker)

一、准备必要工具

  • 安装LLVM:下载Windows预编译包,确保包含clang、lld链接器,以及Linux目标对应的内置库(如libclang_rt.builtins-x86_64-linux-gnu.a)。安装后将LLVM的bin目录添加到系统PATH。
  • 安装CMake:下载Windows版本并加入系统PATH,确保命令行可调用cmake。
  • 获取Ubuntu系统库:从Ubuntu镜像源下载对应架构(如x86_64)的libc6-dev、gcc-multilib等包,解压到本地目录(如D:/ubuntu-cross-root),保留原目录结构(usr/include、usr/lib等)。

二、编写CMake交叉编译工具链文件

新建toolchain.cmake文件,内容如下:

# 指定目标系统与架构
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR x86_64)

# 配置LLVM交叉编译器
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_C_COMPILER_TARGET x86_64-linux-gnu)
set(CMAKE_CXX_COMPILER_TARGET x86_64-linux-gnu)

# 使用LLVM的lld作为链接器
set(CMAKE_LINKER lld)
set(CMAKE_C_LINK_EXECUTABLE "${CMAKE_LINKER} <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_LINKER} <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")

# 指定Ubuntu系统库根目录
set(CMAKE_SYSROOT "D:/ubuntu-cross-root")
# 设置查找路径优先级
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路径替换为你实际存放Ubuntu系统库的目录

三、配置项目CMakeLists.txt

假设项目结构如下:

my_project/
├── src/
│   └── main.c
├── CMakeLists.txt
└── toolchain.cmake

编写示例CMakeLists.txt:

cmake_minimum_required(VERSION 3.20)
project(LinuxCrossDemo C)

add_executable(my_app src/main.c)

# 若需链接系统库(如pthread),添加以下配置
target_link_libraries(my_app pthread)

四、执行交叉编译

打开Windows命令提示符或PowerShell,进入项目目录执行:

# 创建编译目录
mkdir build && cd build
# 用工具链文件初始化CMake
cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake
# 开始编译
cmake --build .

编译完成后,build目录下的my_app即为Ubuntu x86_64平台的可执行文件,可直接复制到Ubuntu系统运行。

常见问题排查

  • 头文件缺失:检查CMAKE_SYSROOT路径是否正确,确保usr/include下包含完整的系统头文件(如stdio.h)。
  • 链接错误:确认usr/lib下存在对应库文件(如libpthread.so),若需静态编译,可添加set(CMAKE_EXE_LINKER_FLAGS "-static")到CMakeLists.txt。
  • 兼容性问题:建议使用LLVM 14及以上版本,对Linux交叉编译支持更完善。

内容的提问来源于stack exchange,提问作者Trilokesh Pradhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:47:24