windows vscode中打包linux c++ arm项目
·
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"
更多推荐
所有评论(0)