ubuntu下发布应用,ldd脚本代替linuxdeployqt

ubuntu下发布应用,ldd脚本代替linuxdeployqt

主机环境 ubuntu22.04

下载linuxdeployqt 发现运行不起来,glbc版本不匹配

bash 复制代码
$ linuxdeployqt -v

linuxdeployqt  (commit 8cb9438), build 67 built on 2024-07-09 18:22:04 UTC
ERROR: The host system is too new.
Please run on a system with a glibc version no newer than what comes with the oldest
currently supported mainstream distribution (Ubuntu Focal Fossa), which is glibc 2.31.
This is so that the resulting bundle will work on most still-supported Linux distributions.
For more information, please see
https://github.com/probonopd/linuxdeployqt/issues/340

$ ldd --version
ldd (Ubuntu GLIBC 2.35-0ubuntu3.8) 2.35
Copyright (C) 2022 自由软件基金会。
这是自由软件;复制本软件需满足的条件请参见源代码。本软件不提供任何
品质保证;甚至不保证适销性或是适用于某种特定用途。
由 Roland McGrath 和 Ulrich Drepper 编写。

所以用ldd脚本代替:

deployapp.sh

bash 复制代码
#!/bin/bash

# 检查是否提供了可执行文件路径
if [ -z "$1" ]; then
    echo "Usage: $0 <path-to-executable>"
    exit 1
fi

EXECUTABLE=$1
DEST_DIR="deploy"
LIB_DIR="$DEST_DIR/libs"

# 创建目标目录
mkdir -p "$LIB_DIR"

# 使用 ldd 查找可执行文件的依赖库
ldd $EXECUTABLE | grep "=> /" | awk '{print $3}' | while read -r lib; do
    echo "Copying $lib to $LIB_DIR"
    cp "$lib" "$LIB_DIR"
done

# 拷贝可执行文件到目标目录
cp "$EXECUTABLE" "$DEST_DIR"

# 使用 patchelf 修补可执行文件和库的路径
echo "Patching executable and libraries..."
patchelf --set-rpath '$ORIGIN/libs' "$DEST_DIR/$(basename $EXECUTABLE)"

find "$LIB_DIR" -type f -name "*.so*" | while read -r lib; do
    patchelf --set-rpath '$ORIGIN' "$lib"
done

echo "Deployment completed. Check the $DEST_DIR directory."
相关推荐
清静诗意4 分钟前
Ubuntu Redis 安装与配置指南
linux·redis·ubuntu
HalvmånEver39 分钟前
Linux:基础开发工具(六)
linux·运维·服务器
百***480742 分钟前
Linux下MySQL的简单使用
linux·mysql·adb
不会写代码的ys1 小时前
仿RabbitMQ实现消息队列(三)--muduo介绍与使用
linux·分布式·rabbitmq
不吃鱼的羊1 小时前
Autosar ECUM
linux·运维·服务器
xc丶卡卡2 小时前
麒麟ARM64安装达梦数据库
linux·运维·服务器·arm·达梦
shepherd枸杞泡茶2 小时前
.NET客户端自动更新的设计与实现
linux·.net
LCG元3 小时前
CI/CD 实战:用 Jenkins 自动构建和部署你的项目
linux
阿干tkl3 小时前
Linux 虚拟机模板制作指南
linux·vmware
裤裤兔3 小时前
linux提取指定前缀文件到其他文件夹
linux·运维·服务器·bash·终端