vcpkg交叉编译qt等过程记录(未完成)

本文用于实验如何通过vcpkg在x64 linux下面交叉编译arm64和loongarch64目标的qt5等开发库。

一、交叉编译工具准备

1.arm64

复制代码
wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz

2.loongarch64

复制代码
wget https://ftp.loongnix.cn/toolchain/gcc/release/loongarch/gcc8/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.6.tar.xz

二、目标机器sysroot准备

先配置sudo可以免密只需rsync,在arm64机器和龙芯机器里面分别执行:

复制代码
which rsync #查看rsync在哪,一般情况下输出/usr/bin/rsync

sudo visudo

添加下面的内容(需要将user换成目标计算机的真实用户名):
user ALL=(ALL) NOPASSWD: /usr/bin/rsync

保存退出

sudo -k  # 清除缓存
sudo rsync --version  # 应无需输入密码直接运行

在交叉编译的机器上面安装symlinks备用:

sudo apt install symlinks

1.arm64

编辑脚本create_sysroot_arm64.sh

复制代码
#!/bin/bash
# 文件名:create_sysroot_arm64.sh

SYSROOT=~/sysroot/arm64
SSH_PORT=6000
REMOTE_USER=user
REMOTE_HOST=127.0.0.1

# SSH控制连接设置
SSH_CONTROL_PATH="/tmp/ssh-control-%h-%p-%r"
SSH_OPTIONS="-o ControlMaster=auto -o ControlPath=$SSH_CONTROL_PATH -o ControlPersist=10m"

# 建立主连接
echo "建立SSH连接(只需输入一次密码)..."
ssh -M -f -N -p $SSH_PORT $SSH_OPTIONS $REMOTE_USER@$REMOTE_HOST

# 确保脚本退出时关闭主连接
trap "ssh -O exit -p $SSH_PORT $SSH_OPTIONS $REMOTE_USER@$REMOTE_HOST 2>/dev/null" EXIT

# 创建sysroot
mkdir -p $SYSROOT

# 函数:安全复制目录
copy_directory() {
    local src=$1
    local dst=$2

    echo "正在复制 $src ..."

    # 先检查远程路径是否存在
    if ssh -p $SSH_PORT $SSH_OPTIONS $REMOTE_USER@$REMOTE_HOST "test -e $src"; then
        # 如果是符号链接,获取真实路径
        real_path=$(ssh -p $SSH_PORT $SSH_OPTIONS $REMOTE_USER@$REMOTE_HOST "readlink -f $src" 2>/dev/null || echo $src)
        echo "  实际路径: $real_path"

        # 创建本地目标目录
        mkdir -p $(dirname $dst)

        # 复制内容
        rsync -avz -e "ssh -p $SSH_PORT $SSH_OPTIONS" \
            --rsync-path="sudo rsync" \
            $REMOTE_USER@$REMOTE_HOST:$real_path/ \
            $dst/
    else
        echo "  $src 不存在,跳过"
    fi
}

# 复制必要的目录
copy_directory "/usr/lib" "$SYSROOT/usr/lib"
copy_directory "/usr/include" "$SYSROOT/usr/include"

# 检查是否有lib64
if ssh -p $SSH_PORT $SSH_OPTIONS $REMOTE_USER@$REMOTE_HOST "test -d /usr/lib64"; then
    copy_directory "/usr/lib64" "$SYSROOT/usr/lib64"
fi

# 创建标准的符号链接结构
cd $SYSROOT
ln -sf usr/lib lib
test -d usr/lib64 && ln -sf usr/lib64 lib64

# 复制一些额外的重要文件
echo "复制ld.so.conf..."
rsync -avz -e "ssh -p $SSH_PORT $SSH_OPTIONS" \
    --rsync-path="sudo rsync" \
    $REMOTE_USER@$REMOTE_HOST:/etc/ld.so.* \
    $SYSROOT/etc/ 2>/dev/null || true

echo "=== 完成!==="
echo "检查结果:"
ls -la $SYSROOT/
ls -la $SYSROOT/usr/lib/*.so* | head -5

修改以上脚本里面的ssh目标机器IP地址,端口,用户名等为你真实的arm64机器的信息,然后bash create_sysroot_arm64.sh 执行并等待复制文件完成。

复制文件完成以后将路径改为相对路径

复制代码
# 将绝对路径转换为相对路径
symlinks -rc ~/sysroot/arm64

2.龙芯

复制一份上面的.sh文件,修改里面的~/sysroot/arm64为~/sysroot/loongarch64,修改SSH相关信息后同样bash xxxx.sh 执行。

相关推荐
深海潜水员10 分钟前
【Unity】背包系统 + 物品管理窗口 (上)
开发语言·vscode·游戏·unity·c#·游戏引擎
德育处主任Pro1 小时前
p5.js 用 beginGeometry () 和 endGeometry () 打造自定义 3D 模型
开发语言·javascript·3d
kyranhan1 小时前
C#程序本地运行正常,通过网络下载报错:FileLoadException:“未能加载文件或程序集“xxx.dll”或它的某一个依赖项。
开发语言·c#·wpf
zhangzhangkeji2 小时前
QT6 源,十章绘图(2)画刷 QBrush:刷子只涉及填充颜色,线型,填充图片,以及变换矩阵这几个属性,附源代码带注释。
qt
重生之我是Java开发战士2 小时前
【C语言】结构体详解
c语言·开发语言
先鱼鲨生2 小时前
gtest框架的安装与使用
开发语言·apache
Ashlee_code3 小时前
南太平洋金融基建革命:斐济-巴新交易所联盟的技术破局之路 ——从关税动荡到离岸红利,跨境科技如何重塑太平洋资本生态
java·开发语言·科技·金融·重构·web3·php
隐-梵3 小时前
2025年测绘程序设计比赛--基于统计滤波的点云去噪(已获国特)
java·开发语言·windows·c#·.net
没有梦想的咸鱼185-1037-16633 小时前
MATLAB科研数据可视化技术
开发语言·机器学习·matlab·信息可视化·数据分析
叉烧钵钵鸡3 小时前
Java ++i 与 i++ 底层原理
java·开发语言·后端