qt static openssl

sobre la compilación de la aplicación openssl inside qt



static (3)

Tengo Qt 4.8.4 (instalación predeterminada) con MSVC. En mi aplicación, estoy usando la conexión ssl al servidor. QtNetworkd4.dll requiere tiempo de ejecución libeay32.dll y ssleay32.dll. Si pongo estas bibliotecas dentro del directorio de mi aplicación, todo funciona bien.

Estaba tratando de compilar openssl libs de forma estática en mi aplicación, aunque la compilación funciona bien, durante la aplicación de inicio se queja de símbolos no resueltos hasta que coloque libeay32.dll y ssleay32.dll en la carpeta de la aplicación.

Entonces la pregunta es: ¿es cierto que la compilación de estas bibliotecas en mi aplicación es inútil, porque QtNetwordkd4.dll no buscará las funciones / símbolos necesarios dentro de mi aplicación binaria, y debería compilar Qt completo con openssl integrado? Me gusta esto:

configure -openssl -I C:/OpenSSL-Win32/include -L C:/OpenSSL-Win32/lib/VC/static

¿O lo que estoy tratando de hacer es realmente factible, y acabo de hacer algo mal, como la versión incorrecta de libeay32 y ssleay32, etc.?

Estoy intentando compilar con openssl estático por dos razones

  1. No tendría que colocar libeay32 y ssleay32 dentro de mi directorio de aplicaciones
  2. Me temo que en algunas máquinas ya puede haber openssl instalado en una versión diferente, y mi aplicación interactuará con estas librerías desde los directorios del sistema.

Correcto, la compilación estática de OpenSSL en su aplicación es inútil, ya que QtNetwork4.dll espera que las funciones sean las DLL de openssl, no en su aplicación.

Las dos opciones son compilar OpenSSL en Qt, o distribuir libeay32 y ssleay32 con su aplicación. Alternativamente, podría pedirles a sus usuarios que instalen esos archivos DLL por sí solos, pero la falta de coincidencia de las versiones puede ser algo malo (existen grandes diferencias entre las versiones 0.9.xy 1.x).


Al compilar Qt, puede elegir una de estas opciones según la línea de comandos de configure :

  1. sin soporte OpenSSL ( -no-openssl )
  2. QtNetwork abre dinámicamente las bibliotecas de OpenSSL ( -openssl ; predeterminado)
  3. Enlace de QtNetwork con OpenSSL ( -openssl-linked )

El último significa enlace dinámico (si Qt está construido como una biblioteca compartida) o enlace estático (cuando se realiza una construcción estática de Qt, es decir, estático).

Así que la "solución" a su problema está pasando -static -openssl-linked a la configure de Qt.

Yo digo "solución" porque

  1. No veo cuál es el problema al enviar libs de OpenSSL junto a Qt, especialmente en una compilación de Qt compartida;
  2. actualizar OpenSSL en su aplicación debido a problemas de seguridad descubiertos en OpenSSL en sí mismo se vuelve más pesado (nuevo binario de la aplicación "enorme" en lugar de simplemente reemplazar las DLL de OpenSSL).

Pruebe de esta manera:

-openssl -openssl-linked -I C:/OpenSSL-Win32/include -L C:/OpenSSL-Win32/lib/VC/static OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32" OPENSSL_LIBS_DEBUG="-lssleay32MDd -llibeay32MDd" OPENSSL_LIBS_RELEASE="-lssleay32MD -llibeay32MD"