Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/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
Windows 使qt分布整齐。删除dll的一部分?_Windows_Qt_Dll - Fatal编程技术网

Windows 使qt分布整齐。删除dll的一部分?

Windows 使qt分布整齐。删除dll的一部分?,windows,qt,dll,Windows,Qt,Dll,我在windows上制作了一个qt程序。 我想和我的朋友分享。 但是我的朋友使用纯Windows7 如果我能只包含所需的dll,那就太好了。 如果我能删除dll中未使用的部分,那就更好了。 (减少dll的大小) 我该怎么做?感谢您,最简单的方法是使用静态的Qt版本,并启用链接时间优化。为此,您需要MSVC(不知道它是否与MinGW的GCC一起工作),并使用配置Qt configure -static -release -ltcg 当然,在使用Qt的(L)GPL版本时,还要注意静态链接意味着什么

我在windows上制作了一个qt程序。 我想和我的朋友分享。 但是我的朋友使用纯Windows7

如果我能只包含所需的dll,那就太好了。 如果我能删除dll中未使用的部分,那就更好了。 (减少dll的大小)


我该怎么做?感谢您,最简单的方法是使用静态的Qt版本,并启用链接时间优化。为此,您需要MSVC(不知道它是否与MinGW的GCC一起工作),并使用配置Qt

configure -static -release -ltcg
当然,在使用Qt的(L)GPL版本时,还要注意静态链接意味着什么


通常,您可以通过功能开关来修剪Qt的各个部分。Unix配置脚本通过传递
-no feature featurename
直接支持该功能,其中
featurename
src/corelib/global/qfeatures.txt
文件中列出的功能之一

可能有一种方法可以使用Windows配置可执行文件(最终,将相应的
QT\u NO\u功能
宏添加到生成的
src/corelib/global/qconfig.h
文件中…)


请注意,功能切换不受官方支持(“尽力而为”支持),因此禁用某些Qt可能会破坏您的构建。YMMV.

试图以任何方式减小实际DLL的大小都意味着删除代码,这是一个非常糟糕的主意。如果满足以下任一条件,您仍然可以更改Qt源:

  • 有营业执照
  • 共享所做的所有更改
…话虽如此,但在你的特殊情况下,这不是一个好办法

尝试减少所需DLL的数量是一个完全不同的故事-您的应用程序通常只需要它所需的模块的DLL。但有些模块与其他模块有依赖关系,因此您可能最终会得到DLL,用于您自己不使用但在内部某处使用的东西。例如,对于基于
QWidget
的项目,您可能最终依赖于Direct3D DLL,这是因为许多库存Qt构建都是使用ANGLE构建的,ANGLE是OpenGL(ES)2基于DirectX的仿真层。您可以使用针对桌面OpenGL的Qt构建来删除一些DLL,但它们与Qt DLL相比相当小。从Qt中省略webkit是删除几MB DLL依赖项的好方法


peppe-static linking已经提到了最后一个选项,它要求您对Qt本身进行静态构建。还有一些限制——如果您想要发布一个封闭源代码/商业应用程序,您必须拥有该特定平台的商业Qt许可证。出于开源和测试的目的,我想这是可以的。静态构建非常好,因为它们提供了更好的性能,并且最终为基本GUI应用程序(QtCore/QtGUI和QtWidgets)提供了一个大约8-9 MB的文件。上次我检查时,QtQuick/QML应用程序不能与静态构建一起工作

你能说得更具体些吗?