Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在OS X和linux上部署QT应用程序_Qt_Deployment_Static Libraries_Dynamic Linking - Fatal编程技术网

在OS X和linux上部署QT应用程序

在OS X和linux上部署QT应用程序,qt,deployment,static-libraries,dynamic-linking,Qt,Deployment,Static Libraries,Dynamic Linking,部署QT应用程序的最佳方式是什么?我已经阅读了trolltech托管的文档,但是与静态库或动态库链接并让用户安装框架更好吗?我真的不希望任何使用我的应用程序的人为了运行一个简单的gui前端而不得不下载一个160mb的框架。在Linux上,最好依靠操作系统的Qt副本,因为它几乎肯定是安装在OS X上的,几乎所有应用程序都使用静态编译库。不幸的是,您必须将所需的Qt库包含在自己的捆绑包中,因为您不能期望您的用户在Mac上安装Qt(而在Linux打包系统上,您至少需要给定版本的Qt) 有一个很好的工具

部署QT应用程序的最佳方式是什么?我已经阅读了trolltech托管的文档,但是与静态库或动态库链接并让用户安装框架更好吗?我真的不希望任何使用我的应用程序的人为了运行一个简单的gui前端而不得不下载一个160mb的框架。

在Linux上,最好依靠操作系统的Qt副本,因为它几乎肯定是安装在OS X上的,几乎所有应用程序都使用静态编译库。

不幸的是,您必须将所需的Qt库包含在自己的捆绑包中,因为您不能期望您的用户在Mac上安装Qt(而在Linux打包系统上,您至少需要给定版本的Qt)

有一个很好的工具可以帮助您实现这一点,称为macdeployqt。您只需要在捆绑应用程序上调用它,它就会打包所需的库,更改二进制文件的链接以引用它们。没有它,为Mac制作捆绑包是一件非常痛苦的事情(现在仍然如此,但要少得多)


之后,您可以像使用任何其他应用程序一样创建.dmg图像。macdeployqt中有一个选项可以创建一个基本图像。

在OS X上,使用从4.5开始的Qt附带的
macdeployqt
工具进行动态生成并对生成的“.app”进行后期处理是一种很好的方法

这将把应用程序使用的Qt框架复制到应用程序包中,这将产生一个比构建应用程序静态版本更大的包

以下是如何确保在动态生成中获得尽可能最小的文件大小:

  • 首先,确保只包含所需的内容(在project.pro文件的
    QT+=coregui网络xml
    行中)
  • 打开应用程序捆绑包并从捆绑包中删除任何不需要的“Qt插件”。
    macdeployqt
    自动整合其中的所有Qt插件,这可能有点笨重
  • 确保您是在发布模式下构建应用程序。否则,您的应用程序可能会链接到Qt4框架的调试库,并且它们非常大(例如,调试库的容量远远超过90 MB,而没有调试符号的版本变体的容量为16 MB).你的情况可能就是这样
  • 如果您有一个大的应用程序二进制文件,您可以使用它将可执行文件压缩40-50%
除此之外,您应该使用压缩磁盘映像来部署应用程序

我的一个项目使用QtGui、QtNetwork、QtCore和QtXml,生成的包大小约为16mb


希望这能有所帮助。

我不同意,Mac OS X上的大多数应用程序都在应用程序中包含框架bundle@Kamil没错——不过,尝试在系统范围内安装框架不是一个好主意;只是Windows/Linux方式之间的差异