Как скомпилировать Qt для 64-битной Windows из 32-битной среды с помощью Visual C++ 2010 Express?

Я пытаюсь скомпилировать библиотеку Qt (мне не нужны демонстрации или примеры) для 64-битной Windows. Здесь есть инструкции, но я сталкиваюсь с ошибкой, описанной в комментарии ниже. Похоже, нигде нет ссылки на то, как можно проделать этот процесс.

Я нацеливаюсь на Microsoft Visual C++ 2010 Express. Похоже, мне нужен Perl и Windows SDK - как мне проделать этот процесс?

2 ответа

Решение

Этот процесс довольно утомителен и отнимает много времени - но я подробно объясню каждый шаг здесь для блага других, которые пытаются скомпилировать Qt в будущем.

  1. Первым шагом является установка всех необходимых компонентов.

    • ActivePerl, который используется в процессе настройки. Вам нужно будет перезагрузить компьютер после установки Perl, так как он изменяет переменные среды.
    • Windows SDK 7.1 (ранее назывался Platform SDK). Обязательно включайте библиотеки x64 при выборе компонентов для установки.

  2. Загрузите исходный архив Qt со страницы загрузок Qt.

  3. Извлеките содержимое архива в легко запоминающееся место (например, C:\). Вам нужно запомнить это местоположение позже, так как мы будем использовать его для установки некоторых переменных среды.

  4. Теперь откройте командную строку Windows SDK 7.1. Начнем с установки среды в режим 32-битного выпуска (нам нужно собрать некоторые инструменты как 32-битные приложения):

    setenv /release /x86
    
  5. Установите следующие переменные среды (пример ниже предполагает, что вы извлекли в C:\):

    set QTDIR=C:\qt-everywhere-opensource-src-4.8.0
    set PATH=%PATH%;%QTDIR%\bin
    
  6. Теперь беги cd %QTDIR% и укажите параметры конфигурации - пример включен ниже:

    configure -release -opensource -qt-zlib -qt-libpng -qt-libmng -qt-libtiff
     -qt-libjpeg -qt-style-windowsxp -qt-style-windowsvista -platform
     win32-msvc2010
    
  7. После завершения процесса настройки, cd к src каталог и запустить:

    qmake
    nmake
    

    Этот процесс может занять много времени, поэтому сейчас самое время сделать перерыв и ответить на некоторые вопросы здесь, о переполнении стека:)

  8. Инструменты теперь собраны, и вам нужно скомпилировать Qt как 64-битную библиотеку. Введите следующую команду:

    setenv /x64
    

    Вам нужно будет снова установить переменные среды из шага 5. Введите эти команды сейчас.

  9. Бежать cd %QTDIR% а затем снова запустите configure В команде обязательно указывается одна дополнительная опция:

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

    -no-qmake опция очень важна - это означает, что мы хотим пропустить компиляцию qmake.exe программа, потому что мы хотим сохранить 32-битную версию.

  10. Теперь все становится действительно сложным из-за некоторых проблем с зависимостями. Инструменты (как moc) что Qt необходимо собрать базовую библиотеку, а некоторые другие компоненты перечислены как зависимости в src.pro файл. Это означает, что компилятор попытается построить их как 64-битные приложения, а затем попытается запустить их, что, конечно, приведет к сбою в 32-битной системе. Итак, что нам нужно сделать, это отредактировать src.pro и удалить эти зависимости сами. Прокрутите вниз возле строки 85 и найдите строку, которая начинается с:

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

    Каждая последующая строка в разделе содержит список подзадач и их зависимостей. Что вы хотите сделать сейчас, это удалить все зависимости, которые начинаются с src_tools_, Например:

    src_gui.depends = src_corelib src_tools_uic
    

    становится:

    src_gui.depends = src_corelib
    

    Возможно, есть лучший способ сделать это, но я еще не понял это:)

  11. Теперь мы cd в src каталог еще раз и выполните следующую команду

    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
    

    Это создает только библиотеки Qt и пропускает зависимости инструмента. Обратите внимание, что это также может занять значительное количество времени.

  12. Теперь у вас должно быть 64-битные библиотеки в lib папка, с которой вы можете ссылаться в ваших 64-битных приложениях Qt.


Изменить: оказывается, что даже этого было недостаточно, так как я по-прежнему сталкивался с некоторыми проблемами при связывании QtWebKit4.dll библиотека (кое-что о неразрешенных символах). Оказывается, кто-то другой уже нашел решение, и вам нужно изменить QMAKE_HOST.arch в QMAKE_TARGET.arch в WebCore.pro,

Кроме того, вышеупомянутые опции будут создавать QNetwork4.dll без поддержки OpenSSL (вы не сможете получить доступ к сайтам через HTTPS - даже в QWebView). К счастью, это не так сложно исправить. Загрузите и соберите OpenSSL для Win64 и добавьте следующие параметры к команде на шаге 9:

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

(Вам придется изменить пути, если вы установили OpenSSL где-то кроме C:\OpenSSL.)


Дальнейшее редактирование: чтобы избавить вас от необходимости делать это самостоятельно, я загрузил скомпилированные библиотеки здесь:
http://www.box.com/s/9710cbb278ef4890a7b5

Как я упоминал в комментариях к ответу Джорджа Эдисона, в компиляторе Microsoft Visual C++, который поставляется с Windows SDK 7.1, есть ошибка. Для получения дополнительной информации см. QTBUG-11445 и QTBUG-19175.

Я скомпилировал 64-битные двоичные файлы Qt 4.8.2, следуя инструкциям Джорджа, включая библиотеку OpenSSH. Кроме того, я применил исправление Microsoft, чтобы исправить ошибку компилятора.

Для вашего удобства я сделал полученные 64-битные библиотеки доступными для скачивания здесь: https://www.box.com/s/8948c60c3cdd743ef83b

Другие вопросы по тегам