最近,我已成功将我的Qt4应用程序迁移到Qt5.实际上,应用程序使用qt-opensource-linux-x64-5.3.1发行版中预构建的二进制Qt5库在开发机器上构建和运行.
因为我的应用程序需要符合LGPL 2.1许可证,所以链接到Qt5必须是动态的.(所以我不能**静态链接到Qt!)
我的问题是部署这个应用程序.我只是无法想出一个包含所有可共享库的包,这些库可以在现有的Linux发行版中运行.
我可以容忍用户需要从qt-opensource-linux-x64-5.3.1二进制文件中自行安装Qt5的要求.事实上,这将确保更严格地遵守LGPL 2.1.所以,我可以假设兼容的Qt5库已在主机上安装并可用(虽然我不知道我是否可以假设Qt安装的特定目录)
但是,我不清楚如何打包我的应用程序以在主机上运行.任何帮助将不胜感激!
我以为其他有类似问题的人会对我最终所做的事情感兴趣。因此,我用最简单的方法对标准的预构建二进制Qt5共享库进行了动态链接。原来,我可以拿出一个适用于以下Linux发行版的发行版:具有KDE桌面的CentOS 7 64位,Ubuntu 12.04 64位和Slackware 14.1 64位。诀窍是不包括ldd命令显示的所有依赖项。相反,我的二进制发行版仅包含以下文件:
+-platforms/
| +-libqxcb.so
+-libicudata.so.52
+-libicui18n.so.52
+-libicuuc.so.52
+-libQt5Core.so.5
+-libQt5DBus.so.5
+-libQt5Gui.so.5
+-libQt5PrintSupport.so.5
+-libQt5Widgets.so.5
+-qm
+-qm.sh
Run Code Online (Sandbox Code Playgroud)
其中,qm是应用程序可执行文件,并且qm.sh是用于启动应用程序的bash脚本。该脚本如下所示:
#!/bin/sh
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
$dirname/qm "$@"
Run Code Online (Sandbox Code Playgroud)
应用程序(qm)没有任何插件,仅使用基本的Qt小部件库。
我也许应该补充一点,我正在使用二进制qt-opensource-linux-x64-5.3.1发行版:
我希望这是有帮助的。