Как скомпилировать Qt для 64-битной Windows из 32-битной среды с помощью Visual C++ 2010 Express?
Я пытаюсь скомпилировать библиотеку Qt (мне не нужны демонстрации или примеры) для 64-битной Windows. Здесь есть инструкции, но я сталкиваюсь с ошибкой, описанной в комментарии ниже. Похоже, нигде нет ссылки на то, как можно проделать этот процесс.
Я нацеливаюсь на Microsoft Visual C++ 2010 Express. Похоже, мне нужен Perl и Windows SDK - как мне проделать этот процесс?
2 ответа
Этот процесс довольно утомителен и отнимает много времени - но я подробно объясню каждый шаг здесь для блага других, которые пытаются скомпилировать Qt в будущем.
Первым шагом является установка всех необходимых компонентов.
- ActivePerl, который используется в процессе настройки. Вам нужно будет перезагрузить компьютер после установки Perl, так как он изменяет переменные среды.
- Windows SDK 7.1 (ранее назывался Platform SDK). Обязательно включайте библиотеки x64 при выборе компонентов для установки.
Загрузите исходный архив Qt со страницы загрузок Qt.
Извлеките содержимое архива в легко запоминающееся место (например,
C:\
). Вам нужно запомнить это местоположение позже, так как мы будем использовать его для установки некоторых переменных среды.Теперь откройте командную строку Windows SDK 7.1. Начнем с установки среды в режим 32-битного выпуска (нам нужно собрать некоторые инструменты как 32-битные приложения):
setenv /release /x86
Установите следующие переменные среды (пример ниже предполагает, что вы извлекли в
C:\
):set QTDIR=C:\qt-everywhere-opensource-src-4.8.0 set PATH=%PATH%;%QTDIR%\bin
Теперь беги
cd %QTDIR%
и укажите параметры конфигурации - пример включен ниже:configure -release -opensource -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -qt-style-windowsxp -qt-style-windowsvista -platform win32-msvc2010
После завершения процесса настройки,
cd
кsrc
каталог и запустить:qmake nmake
Этот процесс может занять много времени, поэтому сейчас самое время сделать перерыв и ответить на некоторые вопросы здесь, о переполнении стека:)
Инструменты теперь собраны, и вам нужно скомпилировать Qt как 64-битную библиотеку. Введите следующую команду:
setenv /x64
Вам нужно будет снова установить переменные среды из шага 5. Введите эти команды сейчас.
Бежать
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-битную версию.Теперь все становится действительно сложным из-за некоторых проблем с зависимостями. Инструменты (как
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
Возможно, есть лучший способ сделать это, но я еще не понял это:)
Теперь мы
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 и пропускает зависимости инструмента. Обратите внимание, что это также может занять значительное количество времени.
Теперь у вас должно быть 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