2012-03-03 14 views
9

Estoy tratando de compilar la biblioteca Qt (no necesito las demostraciones o ejemplos) para Windows de 64 bits. Hay instrucciones here pero me encuentro con el error descrito en el comentario a continuación. No parece haber una referencia en ninguna parte sobre cómo se podría hacer este proceso.¿Cómo compilar Qt para Windows de 64 bits desde un entorno de 32 bits con Visual C++ 2010 Express?

Apunte a Microsoft Visual C++ 2010 Express. Parece que también necesito Perl y el SDK de Windows. ¿Cómo hago este proceso?

Respuesta

14

Este proceso es bastante tedioso y consume mucho tiempo, pero explicaré cada paso en detalle aquí para el beneficio de otros que intenten compilar Qt en el futuro.

  1. El primer paso es instalar todos los requisitos previos.

    • ActivePerl, que se utiliza durante el proceso de configuración. Tendrá que reiniciar después de instalar Perl ya que modifica las variables de entorno.
    • El Windows SDK 7.1 (anteriormente llamado Platform SDK). Asegúrese de incluir las bibliotecas x64 cuando seleccione los componentes para instalar.

  2. Descargar el archivo fuente de Qt desde el Qt Downloads page.

  3. Extraiga el contenido del archivo a una ubicación fácil de recordar (como C:\). Debe recordar esta ubicación más adelante, ya que la utilizaremos para establecer algunas variables de entorno.

  4. Ahora abra el símbolo del sistema de Windows SDK 7.1. Comenzamos definiendo el medio ambiente a modo de lanzamiento de 32 bits (que necesitamos para construir algunas de las herramientas como aplicaciones de 32 bits):

    setenv /release /x86 
    
  5. Establecer las variables de entorno siguientes (ejemplo siguiente se supone que ha extraído a C:\):

    set QTDIR=C:\qt-everywhere-opensource-src-4.8.0 
    set PATH=%PATH%;%QTDIR%\bin 
    
  6. Ahora ejecute cd %QTDIR% y especifique las opciones de configuración - ejemplo se incluye a continuación:

    configure -release -opensource -qt-zlib -qt-libpng -qt-libmng -qt-libtiff 
    -qt-libjpeg -qt-style-windowsxp -qt-style-windowsvista -platform 
    win32-msvc2010 
    
  7. Una vez que el proceso de configuración es completa, cd al directorio src y ejecute:

    qmake 
    nmake 
    

    Este proceso puede tomar una cantidad considerable de tiempo, por lo que ahora sería un buen momento para tomar un descanso y responder a algunas preguntas aquí en Stack Overflow :)

  8. Las herramientas ahora están compiladas y necesita compilar Qt como una biblioteca de 64 bits. Ingrese el siguiente comando:

    setenv /x64 
    

    Deberá volver a configurar las variables de entorno desde el paso 5. Ingrese esos comandos ahora.

  9. Run cd %QTDIR% y vuelva a ejecutar el comando configureasegurándose de especificar una opción adicional:

     
    configure -release -opensource -qt-zlib -qt-libpng -qt-libmng -qt-libtiff 
    -qt-libjpeg -qt-style-windowsxp -qt-style-windowsvista -platform 
    win32-msvc2010 -no-qmake 
    

    La opción -no-qmake es muy importante - que indica que queremos omitir la compilación del programa qmake.exe porque queremos mantener la versión de 32 bits.

  10. Ahora las cosas se complican mucho aquí debido a algunos problemas de dependencia. Las herramientas (como moc) que Qt necesita para compilar la biblioteca principal y algunos de los otros componentes se enumeran como dependencias en el archivo src.pro. Esto significa que el compilador intentará compilarlos como aplicaciones de 64 bits y luego tratar de ejecutarlos, lo cual, por supuesto, fallará en un sistema de 32 bits. Entonces, lo que tenemos que hacer es editar src.pro y eliminar esas dependencias nosotros mismos. Desplazarse hacia abajo cerca de la línea 85 y busque una línea que comienza con:

    !wince*:!ordered:!symbian-abld:!symbian-sbsv2 { 
    

    Cada línea subsiguiente en la sección enumera una sub-objetivo y sus dependencias. Lo que quiere hacer ahora es eliminar todas las dependencias que comienzan con src_tools_. Por ejemplo:

    src_gui.depends = src_corelib src_tools_uic 
    

    se convierte en:

    src_gui.depends = src_corelib 
    

    Puede haber una mejor manera de hacer esto, pero no han descubierto todavía :)

  11. Ahora cd en el src directorio una vez más y ejecute el siguiente comando

    nmake sub-winmain sub-corelib sub-xml sub-network sub-sql sub-testlib 
    sub-gui sub-qt3support sub-activeqt sub-opengl sub-xmlpatterns sub-phonon 
    sub-multimedia sub-svg sub-script sub-declarative sub-webkit 
    sub-scripttools sub-plugins sub-imports 
    

    Esto construye solo las bibliotecas de Qt y omite las dependencias de la herramienta. Tenga en cuenta que esto también puede tomar una cantidad de tiempo considerable.

  12. Ahora debería tener librerías de 64 bits en la carpeta lib que puede vincular en sus aplicaciones de Qt de 64 bits.


Editar: resulta que incluso esto no fue suficiente ya que todavía encontramos con algunos problemas al vincular la QtWebKit4.dll biblioteca (algo acerca de símbolos sin resolver). Resulta que someone else has already found the solution y necesita cambiar QMAKE_HOST.arch a en WebCore.pro.

Además, las opciones anteriores construirán QNetwork4.dll sin soporte OpenSSL (no podrá acceder a sitios a través de HTTPS, ni siquiera en un QWebView). Esto, afortunadamente, no es demasiado difícil de arreglar. Descargar y construir OpenSSL para Win64 y añadir las siguientes opciones para el comando en el paso # 9:

-openssl -I C:\OpenSSL\inc32 -L C:\OpenSSL\out32dll 

(Vas a tener que cambiar las rutas si ha instalado OpenSSL en otro lugar que C:\OpenSSL.)


Además de edición: para ahorrar la molestia de hacer esto por sí mismo, he subido las bibliotecas compiladas aquí:
http://www.box.com/s/9710cbb278ef4890a7b5

+1

Y sin embargo, la gente todavía habla Qt como si fuera esta panacea para el desarrollo de aplicaciones, que es hermoso y simple y * fácil *. Aún no he visto ninguna evidencia de esto. Cuando traté de trabajar con él, mi conclusión es que simplemente no vale la pena, especialmente teniendo en cuenta que una vez que terminas, todavía no tienes una aplicación totalmente nativa. –

+0

@CodyGray: Completamente en desacuerdo: ¿por qué otra cosa pasaría por este problema para usarlo? –

+0

@GeorgeEdison: estoy compilando mi aplicación Qt con sus binarios compilados de 64 bits, pero mi aplicación se cuelga. Creo que esto tiene que ver con el hecho de que utilicé QTableView, que se bloquea debido a un error en el compilador de MS Visual C++, consulte https://bugreports.qt-project.org/browse/QTBUG-19175 y https: //bugreports.qt-project.org//browse/QTBUG-11445. ¿Usaste MSVC SP 1 para compilar los binarios? Estoy recompilando Qt 64-bit ahora mismo, pero lo estoy preguntando porque creo que las bibliotecas compiladas cargadas probablemente también sean útiles para otros y, por lo tanto, es importante que estén libres de errores. – yyzz

1

Como ya he mencionado en los comentarios a la respuesta de George Edison, hay un error en el compilador de Microsoft Visual C++ que viene con Windows SDK 7.1. Para obtener más información al respecto, consulte QTBUG-11445 y QTBUG-19175.

He compilado los archivos binarios de 64 bits de Qt 4.8.2 siguiendo las instrucciones de George, incluida la biblioteca OpenSSH. Además, apliqué Microsoft's hotfix para arreglar el error del compilador.

Para su comodidad, he hecho las bibliotecas de 64 bits resultante puede descargar desde aquí: https://www.box.com/s/8948c60c3cdd743ef83b

+0

Yo también enfrento el mismo problema de compatibilidad luego de haber instalado SDK 7.0 y referirme a este método y a su funcionamiento http://qtitkvtkhelp.blogspot.in/2013/04/qt-64-bit-build.html –

Cuestiones relacionadas