使用 musl-cross-make 构建静态版本的 CMake

346 阅读1分钟

使用 musl-cross-make 构建静态版本的 CMake

本指南介绍如何使用 musl-cross-make 构建一个 完全静态链接的 CMake 可执行文件,方便部署到其他 Linux 系统或集成到交叉工具链中。


一、准备依赖环境

sudo apt update
sudo apt install -y build-essential git wget ca-certificates

二、构建 musl 静态交叉工具链

1. 克隆仓库

git clone https://github.com/richfelker/musl-cross-make.git
cd musl-cross-make

2. 创建 config.mak 文件

TARGET = x86_64-linux-musl
OUTPUT = /opt/musl-cross

3. 处理证书验证失败(可选)

如果 wget 下载失败,提示证书无法验证,需要修改 Makefile文件:

将以下错误配置:

DL_CMD = wget -c -O --no-check-certificate

替换为正确写法:

DL_CMD = wget --no-check-certificate -c -O

或者直接设置环境变量:

export DL_CMD="wget --no-check-certificate -c -O"

4. 开始构建

make -j$(nproc)
sudo make install

构建成功后,交叉工具链位于 /opt/musl-cross/bin/,包含:

  • x86_64-linux-musl-gcc
  • x86_64-linux-musl-g++

三、构建静态版本的 CMake

1. 下载并解压 CMake 源码

wget https://github.com/Kitware/CMake/releases/download/v4.0.3/cmake-4.0.3.tar.gz
tar -xzf cmake-4.0.3.tar.gz
cd cmake-4.0.3

2. 设置环境变量(使用 musl 工具链)

export CC=/opt/musl-cross/bin/x86_64-linux-musl-gcc
export CXX=/opt/musl-cross/bin/x86_64-linux-musl-g++
export CFLAGS="-static"
export CXXFLAGS="-static"
export LDFLAGS="-static"

3. 执行 bootstrap 构建配置

./bootstrap --prefix=/opt/cmake-static \
  --no-system-libs \
  --parallel=$(nproc) \
  -- \
  -DCMAKE_USE_OPENSSL=OFF \
  -DCMAKE_USE_SYSTEM_LIBIDN2=OFF

4. 编译并安装

make -j$(nproc)
make install

四、验证静态 CMake 是否构建成功

ldd /opt/cmake-static/bin/cmake

如果输出为:

not a dynamic executable

或者

不是动态可执行文件

表示成功编译为纯静态链接的可执行文件。


五、集成到交叉工具链中(可选)

将编译好的cmake文件夹,(包含bin、share、doc)拷贝到交叉编译工具链toolchain中,对简单项目直接拷贝bin即可,对复杂项目,需要用到FindPackaged之类的功能的,可以把share也拷贝过去。