Linux环境里打包发布Qt程序,这是个让数目不少的开发者感到头疼的问题,和Windows系统把式子直接打包的方式不一样,Linux环境之下的这个依赖关系以及库文件管理要更加复杂一些,往往促使该程序在一台其主机之上运行状况正常,然而在另外一台主机的机器上却没办法启动起来,历经多年时间的项目实践历程,我从中归纳总结出了一套相对来讲较为靠得住的打包方案,这能够对跨平台部署时所产生的兼容性不利状况进行有效解决 。

为什么Linux下Qt程序打包困难

Linux系统有着众多版本,各发行版之间,库文件版本存在很大差异,即便使用相同的Qt版本来编译,程序也有可能因为所依赖的系统库不一致,进而无法运行,动态链接的机制致使程序在缺少特定库文件时直接崩溃,给部署带来极大挑战。

linux程序打包_linux打包部署项目_linux下qt程序的打包发布

那另外一个常见的问题是,图形出现显示异常的情况,尤其是在涉及到OpenGL相关功能的时候。不同机器的显卡驱动情况有所不同,并且OpenGl的实现也存在差异linux 论坛,这种差异很容易致使界面显示错乱,或者直接出现闪退现象。在测试阶段,就需要在具有不同硬件配置的机器上展开充分验证linux学习,以此来确保图形渲染能够正常进行。

如何检查Qt程序的依赖关系

运用ldd命令能够迅速瞧瞧可执行文件所依赖的动态库,着重留意Qt自身的库文件以及第三方依赖库的路径,保证这些库文件均能够在目标系统里被搜寻到,针对非系统标准路径的库来说,需要开展特别处理。

linux程序打包_linux下qt程序的打包发布_linux打包部署项目

不能仅关注直接依赖,间接依赖关系同样需要予以留意,存在一些库会对其他库产生依赖,进而构成依赖链,能够借助linuxdeployqt工具自动将所有依赖项提取出来,该工具能够对所有依赖关系做递归分析,相较于手动检查而言更加全面且可靠。

使用linuxdeployqt工具打包

具备专门为 Qt 程序打包而设计这种特性的工具是 linuxdeployqt,它可以自动去收集所有那些属于依赖范畴内的库文件,并且能够对插件以及资源予以完成收集举动。在使用期间只要对可执行文件路径加以指定即可,该工具就会自动去进行扫描依赖这种行为,然后将它们复制到指定出来的目录范围内。它还包含支持自动处理 Qt 插件的能力,像是图像格式支持、平台主题等方面均在其适配范围内 。

该工具可自动生成必要的配置文件,设置库文件的搜索路径,对于桌面应用程序,还能够集成appimagetool来生成AppImage格式的独立可执行文件,这种格式在多数Linux发行版上都能够直接运行,极大地简化了分发流程。

如何处理Qt插件和资源文件

Qt程序运行,需各种插件进行支持,诸如图像格式插件,又如sqldriver插件等,这些插件要与可执行文件放置于特定目录结构之下,不然程序不能正常加载,通常提议在打包目录下创建plugins子目录,且按功能分类对插件展开存放。

需要一并打包的资源文件涵盖程序图标,翻译文件,配置文件等,运用Qt的资源系统能够把文件编译进可生效文件,不过这会增大程序体积,另外一种方式即外部资源文件linux下qt程序的打包发布,要保证在程序开工时能够准确找出这些文件的路径。

linux程序打包_linux打包部署项目_linux下qt程序的打包发布

如何解决库文件冲突问题

倘若目标系统之中已然安装了不一样版本的Qt库,那么便有可能出现库文件冲突的情况。解决办法当中的一种是借助LD_LIBRARY_PATH环境变量去指定优先予以使用的库路径。另外还有一种更为彻底的办法是对可执行文件的rpath做出修改,直接将库文件搜索路径嵌入进去。

对于系统库冲突,可考虑静态链接部分非核心库,不过要留意Qt的许可协议,因为商业应用使用静态链接或许得购买商业许可;在动态链接方式下,建议于程序启动脚本中设置库路径优先级。

如何制作AppImage格式安装包

linux下qt程序的打包发布_linux打包部署项目_linux程序打包

Linux软件分发格式AppImage属于那种“一次编译,到处运行”的范畴,它会把所有依赖都进行打包,打包成一个可执行文件的模样,接着用户在下载之后可以直接进行运行,不需要额外进行安装这个举动,而其制作过程是必须要先准备好完整的程序目录结构,完了之后得以使用appimagetool工具来实施打包 。

可对AppImage文件进行桌面图标及菜单项设置,以此提供和原生安装程序相类似的用户体验,更新之时仅需将整个文件替换就行linux下qt程序的打包发布,极为契合那些需要频繁更新的应用程序,然而文件体积较大,缘由在于其涵盖了所有依赖项。

您于Qt程序打包历程之中,有无碰到格外难以应对的依赖难题呢,欢迎于评论区域分享您的经验,假使觉着本文对您有益处,请点赞予以支持且分享给更多开发者 !

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复