我已经使用Qt编写了一个应用程序,并且正在尝试部署它。我构建了它的应用程序并尝试分发它,但是最终不得不静态地构建Qt,这样用户就不必运行Qt的库就可以运行我的应用程序。唯一的问题是字体损坏了,图像也无法加载。
要静态构建Qt,我这样做:
./configure -static -release -ltcg -optimize-size -no-pch -prefix "/home/myuser/Qt/5.11.1-static" -skip webengine -nomake tools -nomake tests -nomake examples -fontconfig
make -j4
make -j4 install
然后出现了字体无法正常工作的问题。我不断收到错误“ QFontDatabase:找不到字体目录(Qt安装目录)/ libs / fonts”,因此我将系统上的dejavu fonts文件夹复制到程序目录中的一个名为“ fonts”的文件夹,并创建了一个Bash脚本将QT_QPA_FONTDIR设置为新的字体目录。这使错误消失,并使我的应用程序上的文本可见,但是当输入密码时,将显示空白字符而不是星号或任何其他字符。此外,图像不显示。我在与应用程序位于同一目录的文件夹中有一个名为“ images”的文件夹,其中包含我的图像,所以我这样做了:
QIcon home("(program directory)/images/home.svg");
QIcon vpn("./images/vpn.svg");
ui->tabWidget->setTabIcon(0, home);
ui->tabWidget->setTabIcon(1, vpn);
图像不会显示,但是如果程序是使用动态Qt构建的,则图像会显示。我尝试使用完整路径并使用./来引用当前目录,但是没有一个导致图像出现。
答案 0 :(得分:0)
FWIW,我公司打包其Qt应用程序的Linux构建的方式是使用动态库,如随附的屏幕快照所示。请注意,实际的可执行文件(在屏幕快照中显示为“ MyApp”,为了保护无辜者,我已进行了一些修改)位于“ bin”子目录中,以及所有必要的共享库文件。在主目录中是一个简短的shell脚本(“ MyApp.sh”),如下所示:
#!/bin/bash
unset QT_PLUGIN_PATH
appname=$(basename "$0" .sh)
dirname=$(dirname "$0")
cd "$dirname/bin"
export LD_LIBRARY_PATH=`pwd`
./$appname "$@"
...希望用户运行MyApp.sh脚本,该脚本将适当地设置LD_LIBRARY_PATH变量,然后运行可执行文件。
这不是世界上最优雅的事情,但是它可以完成工作(很像Linux本身,呵呵)。