2009-05-22 27 views
12

Estoy aprendiendo a desarrollar aplicaciones usando Qt Creator. He creado una aplicación simple en Windows, depende de los usos mingwm10.dll, QtCore4.dll, QtGui4.dll, QtNetwork4.dll. Fuera de QtQui4.dll Uso solo un par de widgets, y no necesito todo el resto ... ¿Es posible reducir el tamaño de QtGui4.dll o hacer algo más para disminuir el tamaño de implementación de la aplicación? ¿Qué hay de la vinculación estática? ¿Incrustará todo el dll, o solo partes de él que se usen? ¿Y también es posible con Qt vincular algunos archivos DLL de forma estática y dinámica?Disminuir el tamaño de la aplicación GUI de Qt

Respuesta

10

No se puede reducir el QtGui4.dll mediante la eliminación de algunas funciones. Trolltech es having a look at this, pero la buena solución parece bastante distante:

Enlaces estáticos, creo que es muy problemático en Windows. Cada vez que lo intentaba, era una pesadilla.

Por lo tanto, parece que está atascado con la DLL normal. La única cosa que puede hacer (que hago para mis aplicaciones Qt es):

  • uso UPX para comprimir el archivo DLL

o

  • uso fuerte de compresión en su instalador

Si ya tiene UPX en su dll, no puede reducirlo más con la compresión del instalador, pero esto puede reducir otros archivos.

+1

Sí, "UPX -9 QtGui4.dll" es el camino a seguir :) –

+0

Dato interesante, nunca antes había usado UPX. – PowerApp101

+0

¡Gracias! ¿Cuál es la huella más pequeña de la aplicación GUI Qt que puede archivar de esta manera? – Dmitri

5

La mejor manera es configurar manualmente la biblioteca de Qt con configure. Mediante la emisión de

configure --help 

verá una serie de opciones que pueden ayudar a reducir tanto el consumo de memoria y disco. P.ej.

--no-stl 
--no-exceptions 

pueden reducir la huella de su aplicación. También puede modificar la especificación mkspec para usar indicadores de optimización más agresivos para su compilador.

1

Si enlaza estáticamente termina con un exe de 1.5GB y sacrifica algunas funcionalidades como complementos. Entonces, realmente no vale la pena a menos que no desee distribuir los dlls. Pero sí, podrías probar la sugerencia de Henrik y también excluir Webkit, que probablemente sea la mayor parte del código.

+0

En el contexto de la pregunta original, excluir WebKit no hace ninguna diferencia ya que no lo usé (solo Core, Gui, módulos de red). –

Cuestiones relacionadas