LinuxdeployQT 今天如何创建 Appimage,自 ubuntu 16.04 发布以来,它可以在每个 Lin



我在 QT 中创建的 c++ 简单应用程序;现在我尝试制作一个 .我的应用程序的AppImage,它将在自ubuntu 16.04以来的每个Linux发行版上运行...我尝试使用 linuxdeployqt,但如果我在最新版本的 Manjaro 上制作了一个应用程序,我无法在 Ubuntu 16,18 上运行它......我该怎么做,我可以在每个 Linux 上运行它?

我发现一些自动化工具并没有完全达到标准,因此让您的应用程序保证在任何系统上工作的唯一"确定"方法是打包它需要的所有库。您可以通过以下两种方式之一执行此操作:

  1. 静态链接应用程序。我这里有一些关于这个主题的注释:静态构建QT应用程序
  2. 将您需要的所有库/共享对象打包到您的包中,并将该批次部署到某个安装文件夹中。

我基于 ldd 编写了自己的脚本来为我执行此操作。脚本现在相当旧,但应该仍然可以工作。请注意,某些插件可能需要手动添加,在这里我在脚本中添加了当时使用的音频插件。

#!/bin/bash
# Rememeber start dir
START_DIR=$PWD
# Determine which dir to deploy in and cd to that dir
if [ -d "$1" ]; then
DEPLOY_DIR=$1
else
DEPLOY_DIR=$PWD
fi
echo "Deploy dir: $DEPLOY_DIR"
cd $DEPLOY_DIR
# Run ldd on all files in the directory and create a list of required qt libs
flag=false
for entry in `ldd $DEPLOY_DIR/* | grep -i qt`; do
if $flag; then
# Only add to the array if it is not already in it
if ! [[ $libsArray =~ $entry ]]; then
echo "adding $entry"
libsArray="$libsArray $entry"
fi
flag=false
fi
# If we see a "=>" then the next line will be a library
if [ $entry == "=>" ]; then
flag=true
fi
done
echo 
echo
# Create the required folder structure. Note here we are need the qt audio plugin so we are going to manually copy that as well.
mkdir -p lib
mkdir -p lib/audio
# Now copy these files to the deploy directory
for entry in $libsArray; do
echo "cp -v -f $entry $DEPLOY_DIR/lib"
cp -v -f $entry $DEPLOY_DIR/lib
done
# Now get the audio lib - this is a plugin that we are using so we need these libs as well.
# Add other plugins here as well.
# TODO: maybe we can read this in from the *.pro file.
cp -v -f `qmake -query QT_INSTALL_BINS`/../plugins/audio/* $DEPLOY_DIR/lib/audio
# Go back to start dir
cd $START_DIR

或者你可以尝试使用linuxdeployqt - 但关键是要确保你拥有你需要的所有库和它们的本地副本,这样它们就是首先找到的(而不是来自其他地方的潜在不兼容的库(。

相关内容

  • 没有找到相关文章

最新更新