суббота, 13 сентября 2014 г.

Статическая линковка QT при использовании Microsoft Visual Studio

Статическая сборка QT 5.3.1 для MSVC.

Для того чтобы успешно собрать статическую сборку, включая возможность работы с odbc следует выполнить следующее:
Скачать и установить 

  1. qt-vs-addin
  2. Microsoft DirectX SDK
  3. Microsoft Visual Studio 2010 SP1
  4. Патч  KB2280741-x86.exe для Microsoft Visual Studio помогающий решить проблему линкера с ключом /O2(Многопоточная сборка)
  5. Скачать веб установщик QT, выбрать нужные опции, и обязательно sourcecode для версии которую вы хотите собрать.
  6. Скачать QT Jom.
  7. Установить переменную среды:
  8. QMAKESPEC =  win32-msvc2010.
По сути вам необходимы из этого списка только то что отмечено жирным шрифтом. Однако рекомендую поставить все.

Уже все поставлено? Тогда поехали!
Откройте в блокноте config по следующему пути, C:\Qt\5.3\Src\qtbase\mkspecs\win32-msvc2010\qmake.conf и замените что у вас написано следующем:
QMAKE_CFLAGS_RELEASE    = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG      = -Zi -MTd
Cохраните изменения.

Открываем
Visual Studio Command Promt (Пуск->Microsoft Visual Studo->Tools) Запускаете с правами администратора.
Набрать в окне терминала следующее :
>> cd C:\Qt\5.3\Src\qtbase

>> configure -static -debug-and-release -opensource -qt-sql-od
bc -qt-sql-sqlite -platform win32-msvc2010 -plugin-sql-odbc -nomake examples -no
make tests -opengl desktop -mp -audio-backend

Выберите нужную вам лицензию ( нажмите y).
Ждете две минуты пока configure, не завершит работу. Уже Завершил?

Вводите в окне терминала следующее :
C:\Qt\Jom\Jom.exe -j 200
(параметр - j) настраиваемый на моей системе (CORE I7 8GB DDR3 WINX64), выберите значение -j 50 если ваша система < моей по тех.характеристикам.
На моей системе сборка завершилась через 15- минут.

После того как все собралось,
Запускайте студию вкладка QT -> Options -> Add -> указываете путь до C:\Qt\5.3\Src\qtbase\-> Ок.
Открываете проект qt, далее выставляете release сборку, переходите на вкладку  C++ ->Code Generation -> Multi-threaded (/MT)
Если при компиляции линкер будет ругаться что операции new определены в uafxcw.lib, выполните следующее :


Ссылки по теме 
http://qt-project.org/forums/viewthread/34710
http://www.qtcentre.org/threads/54772-Qt-5-0-2-static-buliding-error
http://www.prog.org.ru/topic_20045_0.html
http://stackoverflow.com/questions/14932315/how-to-compile-qt-5-under-windows-or-linux-32-or-64-bit-static-or-dynamic-on-v
http://qt-project.org/doc/qt-4.8/configure-options.html