Qt应用打包发布,部署真正的Qt程序Linux&Windows
最近在发布Qt应用时遇到了一些困难,Windows还好,在Linux上面发布遇到了不少的麻烦(实际Linux应该简单才对),经过在网络搜索发现帖子不少,但都比较片面,现把Qt应用程序在Linux&Windows打包部署总结如下。
关键点:
应用部署的核心是加载库,一个Qt应用程序至少包含以下库:
Windows 版本
Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll
Linux 版本
libQt5Core.so.5、libQt5Gui.so、libQt5Widgets.so
与其他应用程序一样,Qt应用程序也依赖于操作系统来加载这些库文件,这意味着它们必须放置在操作系统可以找到它们的位置。在Windows上,这意味着在.exe文件同一目录中或搜索路径中指定的目录(例如C:\ Windows \ System32)。将DLL复制到未安装Qt的另一台PC上时,我们通常不想弄乱其他计算机上的搜索路径,而是将DLL与.exe文件放在一起,这可能是最好的解决方案。
在Linux上,将.so文件放在可执行文件同一目录中不会像Windows中那样自动加载它们。但大多数Linux系统都预先安装好了Qt,例如在Ubuntu上,通常在/ usr / lib / i686-linux-gnu或/ usr / lib / x86_64-linux-gnu中安装了Qt,因此我们的应用仍然可以运行(但是请注意版本问题,Ubuntu提供的Qt可能太旧了,我们的应用无法启动)。
还有一点在部署Qt应用比较容易出错的是Qt的插件机制,除了上面提到的几个Qt核心库之外,程序想要运行还必须提供一些插件,例如:platforms、sqldrivers、imageformats,这些是插件目录,名字是Qt定的(当然可以修改,但是不建议修改)。其中最重要的是platforms插件目录,里面提供一些平台插件,所有Qt应用程序都需要这些库,对于Windows默认的是qwindows.dll,对于Linux,则为libqxcb.so。这是Qt的QPA(Qt Platform Abstraction层)它负责许多特定于OS的事情,例如将调用转换setWindowState(Qt::WindowMaximized)为Windows / Linux特定的系统调用。
环境设置
上面提到了一些Qt插件,这些插件Qt是如何加载的呢?默认Qt会在可执行文件所在的目录查找并加载这些插件。但是为了我们的程序目录更加简洁,可以自定义插件目录。
设置环境变量:
使用环境变量可能是比较容易的选择,例如:
export QT_PLUGIN_PATH=plugins