1、安装wsl ubuntu22.04 Extensions

2、在wsl中安装打包工具

sudo apt update
sudo apt install -y cmake make build-essential libcurl4-openssl-dev libglib2.0-dev

# 安装arm交叉编译
sudo apt-get update && sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross pkg-config

由于默认的镜像源中没有arm索引,先备份source.list后配置arm索引

ls -l /etc/apt && ls -l /etc/apt/sources.list.d && (cat /etc/apt/sources.list 2>/dev/null || true) && for f in /etc/apt/sources.list.d/*; do echo '====' $f; cat "$f"; done

set -e  
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak.$(date +%Y%m%d-%H%M%S)  
cat <<'EOF' | sudo tee /etc/apt/sources.list >/dev/null  
deb [arch=amd64] http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse  
deb-src [arch=amd64] http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse  
deb [arch=amd64] http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse  
deb-src [arch=amd64] http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse  
deb [arch=amd64] http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse  
deb-src [arch=amd64] http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse  
deb [arch=amd64] http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse  
deb-src [arch=amd64] http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse  
deb [arch=amd64] http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse  
deb-src [arch=amd64] http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse  
EOF
cat <<'EOF' | sudo tee /etc/apt/sources.list.d/arm64-ports.list >/dev/null  
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports jammy main restricted universe multiverse  
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports jammy-security main restricted universe multiverse  
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports jammy-updates main restricted universe multiverse  
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports jammy-backports main restricted universe multiverse  
EOF
sudo apt-get update  
# 安装arm64依赖
sudo dpkg --add-architecture arm64 && sudo apt-get update && sudo apt-get install -y libglib2.0-dev:arm64 libcurl4-openssl-dev:arm64 libssl-dev:arm64


3、打包

cd /home/skyer/linux-test && rm -rf build-arm64-cross && mkdir build-arm64-cross && cd build-arm64-cross && PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ .. && cmake --build . --target TEST -j && cpack -G TGZ && file TEST && ls -lh TEST-*.tar.gz

整理一键打包脚本

#!/bin/bash

set -euo pipefail

SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
BUILD_DIR="${SCRIPT_DIR}/build-arm64-cross"
TOOLCHAIN_GCC="${CROSS_GCC:-aarch64-linux-gnu-gcc}"
TOOLCHAIN_GXX="${CROSS_GXX:-aarch64-linux-gnu-g++}"
PKG_CONFIG_LIBDIR_DEFAULT="/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig"
PKG_CONFIG_LIBDIR="${PKG_CONFIG_LIBDIR:-${PKG_CONFIG_LIBDIR_DEFAULT}}"

echo "[1/4] Checking toolchain"
if ! command -v "${TOOLCHAIN_GCC}" >/dev/null 2>&1 || ! command -v "${TOOLCHAIN_GXX}" >/dev/null 2>&1; then
    echo "Missing ARM64 cross compiler: ${TOOLCHAIN_GCC} / ${TOOLCHAIN_GXX}"
    echo "Install: sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross libglib2.0-dev:arm64 libcurl4-openssl-dev:arm64 libssl-dev:arm64"
    exit 1
fi

  

echo "[2/4] Configuring CMake"
rm -rf "${BUILD_DIR}"
cmake \
    -S "${SCRIPT_DIR}" \
    -B "${BUILD_DIR}" \
    -DCMAKE_SYSTEM_NAME=Linux \
    -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
    -DCMAKE_C_COMPILER="${TOOLCHAIN_GCC}" \
    -DCMAKE_CXX_COMPILER="${TOOLCHAIN_GXX}"
    
echo "[3/4] Building"
PKG_CONFIG_LIBDIR="${PKG_CONFIG_LIBDIR}" cmake --build "${BUILD_DIR}" --target TEST -j

echo "[4/4] Packaging"
(
    cd "${BUILD_DIR}"
    cpack -G TGZ
)

PACKAGE_PATH=$(find "${BUILD_DIR}" -maxdepth 1 -name 'Linuxtest-*-arm64.tar.gz' | sort | tail -n 1)

if [[ -z "${PACKAGE_PATH}" ]]; then
    echo "Package not found"
    exit 1
fi

echo "Built package: ${PACKAGE_PATH}"

file "${BUILD_DIR}/TEST"

更多推荐