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

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

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

Ответы [ 2 ]

14 голосов
/ 03 марта 2012

Этот процесс довольно утомителен и отнимает много времени - но я подробно объясню каждый шаг здесь для блага других, пытающихся скомпилировать 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 <b>-no-qmake</b>
    

    Опция -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. Теперь у вас в папке lib должны быть 64-битные библиотеки, с которыми вы можете ссылаться в своих 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

1 голос
/ 02 июля 2012

Как я уже упоминал в комментариях к ответу Джорджа Эдисона, в компиляторе 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

...