środa, 20 lutego 2013

Kompilacja Qt 5.0.1 z wykorzystaniem Visual Studio 2012 tak aby działo pod Windows XP

Na dzień dzisiejszy na stronie Qt Project dostępne są gotowe instalatory Qt 5.0.1 wersji MinGW oraz VS2010. Co jeśli chcemy używać VS2012? Wtedy niestety jesteśmy skazani na samodzielną kompilację Qt ze źródeł używając niekompletnych instrukcji dostępnych na stronach Qt. Jednak pomimo tych utrudnień kompilacja z użyciem VS2012 jest jak najbardziej możliwa o czym świadczy ten wpis.



Pewnie zapytacie dlaczego nie mogę/nie chcę używać VS2010 C++ Express i mieć wszystko gotowe?

  • Obecnie używam Qt 4.8.4 i VS2008, jeśli mam się przesiadać to na najnowszy dostępny kompilator, czyli VS2012 Express for Desktop
  • Mamy rok 2013, dlaczego miałbym używać przestarzałego kompilatora (VS2010) skoro jest dostępny nowszy (VS2012)?
  • VS2010 C++ Express nie pozwala wykonać "Attach to process", VS2012 Express for Desktop potrafi a niestety Qt Creator jako debugger wciąż pozostawia wiele do życzenia
  • Merge modules nie są dostarczane razem VS2010 C++ Express, co utrudnia zbudowanie instalatora WIX. Merge modules były dostarczane w VS2008 C++ Express oraz są ponownie dostarczane z VS2012 Express for Desktop
  • VS2012 wspiera w większym stopni C++11 niż VS2010
Skoro VS2012 jest lepsze niż VS2010 to dlaczego Qt Project nie dostarcza gotowego instalatora? Jest jeden haczyk, VS2012 nie wspiera XP, tj. program zbudowany za pomocą VS2012 nie będzie działał na Windows XP. Tj. tak było jeszcze kilka miesięcy temu, jednak Microsoft wydał "Update 1" który dostaje wsparcie dla Windows XP - wystarczy wybrać odpowiednią wersję przy konfiguracji projektu w IDE Visual Studio. Zrobienie tego z linii poleceń to inna historia, ale o tym powiem za chwilę.

Wstęp teoretyczny za nami, to zaczynamy. Potrzebujemy następujące komponenty:
  1. źródła Qt 5.0.1
    • http://releases.qt-project.org/qt5/5.0.1/single/qt-everywhere-opensource-src-5.0.1.zip
  2. Visual Studio 2012 Express for Desktop:
    • http://go.microsoft.com/?linkid=9709949
    • http://www.microsoft.com/visualstudio/eng/downloads#d-2010-express
  3. Visual Studio 2012 Update 1:
    • http://www.microsoft.com/pl-pl/download/details.aspx?id=35774
  4. Qt Creator 2.6.2 (potrzebny już po kompilacji gdy rozpoczniemy pracę z wykorzystaniem nowego Qt):
    • http://releases.qt-project.org/qtcreator/2.6.2/qt-creator-windows-opensource-2.6.2.exe
  5. Microsoft Direct X SDK June 2010 (dokładnie tą wersję):
    • http://www.microsoft.com/en-us/download/details.aspx?id=6812
  6. Perl (x86):
    • http://www.activestate.com/activeperl/downloads
  7. Python np. 3.3:
    • http://www.activestate.com/activepython

Przystępujemy do instalacji:
  1. Instalujemy VS 2012 Express for Desktop w domyślnej lokalizacji
  2. Instalujemy Visual Studio 2012 Update 1
  3. Instalujemy wszystkie aktualizacji które zostaną znalezione przez Visual Studio. Dobrze jest po zainstalowaniu VS odpalić IDE, sprawdzić czy są dostępne aktualizacje i je zainstalować.
  4. Instalujemy Direct X SDK June 2010 (dokładnie tej wersji) w domyślnym katalogu. Tutaj uwaga, u mnie na Windows 8 instalacja kończy się niepowodzeniem, ale pliki pozostają na dysku - tyle w zupełności wystarcza. Dlaczego potrzebujemy tej wersji, o tym za chwilę?
  5. Instalujemy Per w C:\Perl
  6. Instalujemy Python w C:\Python33
  7. Rozpakowujemy źródła Qt do C:\Qt\qt-everywhere-opensource-src-5.0.1 (katalog może być inny, ja użyłem takiego)
Uruchamiany wiersz poleceń i zaczynamy:
"%VS110COMNTOOLS%\..\..\VC\vcvarsall.bat" 
set PATH=C:\Perl\bin;%PATH% 
set PATH=C:\Python33;%PATH%
Teraz musimy zmusić kompilator aby używał bibliotek zgodnych z XP. Rozwiązanie to pochodzi z bloga Microsoftu tylko w moim przypadku musiałem trochę poprawić ścieżki (oni mają 7.1A, u mnie było v7.1A), dlatego sugeruję upewnić się, że ścieżki są poprawne:
set INCLUDE=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A\Include;%INCLUDE% 
set PATH=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A\Bin;%PATH% 
set LIB=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A\Lib;%LIB% 
set CL=/D_USING_V110_SDK71_ %CL% 
set LINK=/SUBSYSTEM:CONSOLE,5.01 %LINK%
Gdybyśmy skompilowali Qt w takiej konfiguracji większość modułów by działała, z wyjątkiem OpenGL. Domyślnie OpenGL jest tłumaczony na DirectX z wykorzystaniem projektu ANGEL którego elementy są załączane do źródeł Qt i w wyniku kompilacji powstają libEGL.dll i libGLESv2.dll. Tylko gdy sprawdzimy zależności wynikowych plików, to okazuje się, że libGLESv2.dll wymaga D3DCompiler_46.dll a ta biblioteka nie działa na XP. Maksymalną wersja jaką możemy użyć jest D3DCompiler_43.dll, dlatego właśnie potrzebujemy DirectX SDK June 2010 - to ostanie SDK które działa z XP (z tego co mi wiadomo):
set INCLUDE=%ProgramFiles(x86)%\Microsoft DirectX SDK (June 2010)\Include;%INCLUDE% 
set LIB=%ProgramFiles(x86)%\Microsoft DirectX SDK (June 2010)\Lib\x86;%LIB%
To teraz już z górki. Pozostaje ustalić gdzie docelowo chcemy mieć wersję zbudowaną Qt (ja wybrałemm C:\Qt\5.0.1_VS2012) i rozpocząć kompilację.
set DEST_DIR=C:\Qt\5.0.1_VS2012
configure -debug-and-release -c++11 -prefix %DEST_DIR% -opensource -nomake webkit -nomake examples -nomake tests -platform win32-msvc2012 -confirm-license -mp 
nmake
Po zakończeniu kompilacji pozostaje zainstalować Qt w katalogu docelowym i można skasować katalog ze źródłami:
nmake install
To co istotne, katalog ze źródłami nie jest potrzebny do dalszej pracy i w przypadku przekazywania skompilowanego Qt znajomym wystarczy spakować i przesłać katalog C:\Qt\5.0.1_VS2012

Na koniec odpalamy Qt i dodajemy nasze Qt do listy dostępnych "kitów". To by było na tyle. Wspomnę jeszcze, że jeśli tworzymy instalator to teraz trzeba dołączyć kilka plików więcej:
  • bin\Qt5Core.dll
  • bin\Qt5Gui.dll
  • bin\Qt5Network.dll
  • bin\Qt5Xml.dll 
  • bin\Qt5Declarative.dll
  • bin\Qt5Script.dll
  • bin\Qt5Sql.dll 
  • bin\Qt5XmlPatterns.dll 
  • bin\Qt5Widgets.dll
  • bin\libEGL.dll
  • bin\libGLESv2.dll
  • plugins\imageformats\qico.dll
  • plugins\platforms\qwindows.dll

Brak komentarzy:

Prześlij komentarz

Reklamy będą usuwane.