Kompilacja w Qt Creator / MinGW

0

Korzystam z Qt 5.3.0 w systemie Windows i programy kompiluję i uruchamiam w Qt Creator w wersji 3.1.1 pracującym w połączeniu z MinGW w wersji 4.8.2 32bit, który instaluje się razem z Qt Creatorem.

Okazuje się, że po włączeniu kompilacji Release i skompilowaniu, plik EXE nie uruchamia się z ikony, ani tym bardziej po przeniesieniu do innego komputera. Z poziomu Qt Creatora programu bez problemu się uruchamiają.

Załóżmy, że mam goły komputer, instaluję Windows i najnowszą wersję Qt Creator. Co po instalacji muszę ustawić lub zmienić, żeby program kompilował się poprawnie, do katalogu z plikiem EXE zostały skopiowane potrzebne pliki DLL i żebym miał pewność, że program również zadziała po przeniesieniu do innego komputera z systemem Windows bez zainstalowanego Qt ani Qt Creatora?

2

Skopiuj brakujące biblioteki z katalogu %QTDIR%\5.3\mingw482_32\bin (czyli jeśli zainstalowałeś Qt do C:\Qt to będzie to C:\Qt\5.3\mingw482_32\bin). Będziesz też potrzebował odpowiednich pluginów platform z %QTDIR%\5.3\mingw482_32\plugins (i ew. pluginów SQL jeśli używasz SQL). Tak wygląda mój zestaw bibliotek, który dołączam klientom do programów:
user image

0

Z tego, co widzę, obowiązkowo należy dodać katalog "platforms", 6 plików widocznych na screenie, których nazwa nie rozpoczyna się od Qt5 i plik Qt5Core.dll.

Natomiast zestaw pozostałych plików zależy od tego, co się wykorzystuje, czyli Qt5Network.dll w przypadku aplikacji wykorzystującej sieć, Qt5Sql.dll w przypadku używania bazy danych, Qt5Xml.dll, jeżeli korzysta się z narzędzi XML.

Posiadam 3 komputery:

  1. Komputer stacjonarny z Windows XP 32-bit i zainstalowanym Qt 5.3.0, Qt Creator 3.1.1 i MinGW 4.8.2
  2. Maszyna wirtualna zawierająca Windows XP 32-bit bez Qt
  3. Laptop z Windows 7 64-bit z Qt 5.2.1, Qt Creator 3.0.1, MinGW 4.8

Wykonane przeze mnie próby wykazały, że program musi zostać uzupełniony o pliki DLL dokładnie z tego komputera, na którym został skompilowany, wtedy uruchamiał się na wszystkich trzech komputerach.

Czy istnieje możliwość wychwycenia i znalezienia lub określenia w inny sposób, których plików DLL i pluginów z serii Qt5xxx potrzebuje konkretny program?

Czy w systemach Linux i MacOS X również trzeba uzupełniać pliki bibliotek po kompilacji?

3

program musi zostać uzupełniony o pliki DLL dokładnie z tego komputera, na którym został skompilowany
To nie pochodzenie plików jest ważne, tylko ich wersja ;-) Pliki DLL muszą być w tej samej wersji Qt, z jaką skompilowano program.

Brak DLL-ki w większości przypadków powoduje wyświetlenie konkretnego komunikatu z nazwą tej DLL-ki.
Możesz zacząć od gołego exeka i dodawać mu kolejno to o co się domaga.

Jest też taki program Dependency Walker ale nigdy się nim nie bawiłem.

0

Dependency Walker pokazuje dla każdego programu, że brakuje WER.DLL i IESHIMS.DLL. Tych plików nie ma w całym komputerze. Czy u Was też tak jest? Mimo to, programy działają poprawnie.

3

@andrzejlisek

Czy istnieje możliwość wychwycenia i znalezienia lub określenia w inny sposób, których plików DLL i pluginów z serii Qt5xxx potrzebuje konkretny program?

Najprostszą metodą (moim zdaniem) zebrania "do kupy" wszystkich plików dll potrzebnych do użycia danego programu jest użycie
windeployqt twoj_program.exe

A dependency walker u mnie też wskazywał kwiatki, kiedy próbowałem ręcznie dołączać odpowiednie dll.

1 użytkowników online, w tym zalogowanych: 0, gości: 1