2010-12-06 10 views
6

Hice una pequeña aplicación y construí una versión de lanzamiento. Ahora quiero subirlo a mi sitio. Nunca he hecho esto antes con Qt, así que no estoy seguro de qué incluir junto con el binario.¿Qué necesitan las personas para ejecutar mi aplicación?

¿Cómo puedo averiguar qué DLL se deben incluir con mi aplicación? ¿Y dónde los consigo? Estoy ejecutando Windows, pero también me gustaría saber qué debo hacer en caso de que quiera lanzar una versión de Linux.

+3

Para linux solo dales la fuente y deja que compilen. – Falmarri

+3

@Falmarri: Tal visión ideológica. Estoy seguro de que sabes muy bien que esto a menudo no es posible. – Goz

+0

@Goz: No es deseable ... –

Respuesta

9

para Windows:

Puede utilizar Dependency Walker para ver lo que las bibliotecas Qt (u otros) que debe enviar. Este es el ejecutable depends.exe que se incluye con Visual Studio, pero puede descargarlo por separado de: http://www.dependencywalker.com/

Cargue su aplicación en eso y enumerará todos los módulos que espera en tiempo de ejecución. También podría tener que enviar un Visual C++ Runtime Redistributable compatible con el compilador con el que creó el ejecutable (si es VC++).

Tenga en cuenta que el "walker de dependencias" no tiene en cuenta los complementos de Qt. Un ejemplo de esto sería el sistema QtAssistant (para la funcionalidad del tipo de menú de ayuda), que a partir de Qt4 se basa en la funcionalidad sqlite de Qt, que normalmente se construye como un complemento (qtsqlite4.dll si mal no recuerdo).

Para Linux:

Esto es complicado debido a las disparidades más amplias en las distribuciones de Linux. Por supuesto, puede usar el sistema de compilación GNU si desea enviar el código fuente, pero si está enviando archivos binarios y desea admitir una variedad de distribuciones, puede hacer mejor para compilar paquetes para cada plataforma en la que desee publicar.


En mi pasado, una empresa que trabajaba para el pasado a utilizar cmake y después de la creación de todo el proyecto y construir archivos, utilizado para generar que construye y paquetes para diferentes sistemas operativos. En Windows, esto significaba conectar con Inno Setup, y para sistemas tipo Unix, cmake sabe cómo generar cosas como scripts instalados de shell. Definitivamente hizo la vida mucho más fácil.


Nuestro departamento de control de calidad sería probar nuestro software en instancias de máquinas virtuales de nuestras plataformas compatibles, completamente limpio, y ver si hay algo que faltaba.

+0

Gran respuesta, precisa y al grano. –

+0

depends.exe obtendrá las dependencias estáticas pero no las dinámicas (llamadas explícitas a GetProcAddress). Si hay dependencias en MSVCRT, entonces eso se vuelve bastante complejo, básicamente debes enviar el redistribuible. ¿No puede vincular estáticamente en lugar de contra Qt DLL? Haz la distribución mucho más simple. –

+0

Además, en mi experiencia vale la pena resolver esto correctamente (leyendo los manuales de las bibliotecas) en lugar de la ingeniería inversa, que tiene una tendencia a fallar en la plataforma en la que no lo pruebas (o no existía cuando redistribuyes) . –

2

Si está hablando de archivos DLL, supongo que se trata de Windows.

Utilice Dependency Walker para ver las dependencias de la DLL.

O ... tome un sistema limpio, sin herramientas de desarrollo instaladas, y coloque el ejecutable, intente ejecutarlo allí y vea qué archivos DLL se informan como necesarios e inexistentes. Coloque las DLL cerca del ejecutable.

0

Para una versión de Linux, puede crear versiones de instaladores específicas de plataforma para cada fork de Linux o puede permitir que las personas compilen desde el origen. Si su aplicación es nueva, la única forma de obtener exposición es proporcionar a las personas instaladores listos, los instaladores específicos. Los nuevos usuarios detestan compilar paquetes desde el origen.

Primero puede probar los paquetes debian (.deb) y redhat (.rpm). Estas dos líneas son extremadamente populares y le permitirán probar las cosas.

Cuestiones relacionadas