2013-04-24 11 views
11

Opracowałem prostą aplikację z Qt 5.0.2 na Windows 7 Ultimate. Jako kompilator QtCreator używał MSVC2012_64bit. I nie mogę przenieść aplikacji na inny komputer. To nie działa. Aplikacja Qt wymaga bibliotek DLL, których nie mogę znaleźć. Eksplorator zależności uważa, że ​​poniżej nie znaleziono .dll. Gdzie mogę je znaleźć? Dlaczego ten problem jest tak szeroko rozpowszechniony? Wszyscy ludzie narzekają, że nie mogą uzyskać swojego .exe, który jest rozwijany za pomocą Qt, pracować na innym komputerze. enter image description hereJak uruchamiać aplikacje Qt 5 na innych komputerach (Windows 7)?

Edit1: BTW kiedy dodałem DCOMP.dll pobrać z Internetu, nie znaleziono DLL stać się 2-3 razy więcej niż to jest teraz :)

EDIT2: Należy również pamiętać, że na drugi komputer (Windows 7 Home Premium) po dwukrotnym kliknięciu pliku exe, pokazuje, że ładuje się i nie ma żadnego efektu, nie ma żadnego błędu.

+0

Czy to działa na Twoim komputerze? Dlaczego nie używasz Process Explorer, aby uzyskać listę wszystkich bibliotek DLL, które są ładowane w czasie wykonywania? – sashoalm

+0

Tak, jasne! Ale nie mogę uruchomić exe na innych komputerach. I nie mogę znaleźć tych plików DLL w dowolnym miejscu na moim komputerze. Bardzo dziwne. – Narek

+0

Dlaczego nie używasz Process Explorer, aby uzyskać listę wszystkich bibliotek DLL, które są ładowane podczas wykonywania? Na przykład, kiedy uruchamiasz program ** na komputerze **, gdzie to działa. Mam na myśli, zainstaluj Process Explorer na komputerze i zrób to. Ponadto MSVC nie wydrukowało wszystkich załadowanych bibliotek, takich jak te "rundll32.exe": Załadowano "C: \ Windows \ System32 \ dwmapi.dll", Nie można znaleźć lub otworzyć pliku PDB'' – sashoalm

Odpowiedz

10

Ta lista bibliotek DLL potrzebnych i ja również mam skopiowany folder C:\Qt\Qt5.0.2\5.0.2\mingw47_32\plugins\platforms:

enter image description here

Tylko ten i pracował dla mnie. BTW Używam systemu Windows 7 Ultimate 64x i Qt 5.0.2 dla Windows 32-bitowego (MinGW 4.7, 650 MB) pakietu dla Qt.

EDIT: Można również trzeba .dll Qt Creator, który ma być skopiowany, a także być może trzeba mieć plik o nazwie qt.conf o następującej treści (skopiowane z @Renato odpowiedź):

[Paths] 

Libraries=./platforms 
7

wystarczy dodać plik qt.conf do aplikacji reż o następującej treści

[Paths] 

Libraries=./platforms 

skopiuj do samej aplikacji dir, podkatalogu "platform", które można znaleźć w dir C: \ Qt \ Qt5.1.1 \ Tools \ Qt Creator \ bin

To wszystko.

Rozwiązuje to problem, ponieważ qtcore.dll jest kompilowany przy użyciu wewnętrznych ścieżek instalacji qt. (Nie wiem wy!). Ponieważ qt.conf jest zawsze czytany przez qtcore po uruchomieniu aplikacji, biblioteki w "platformach" zostaną uwzględnione, a aplikacja działa na wszystkich hostach.

Ostrzeżenie: qtcore i platformy sub dir muszą zostać zainstalowane z tej samej instalacji qt.

Przepraszam przez Anglików, ale rozwiązanie działa dobrze.

+0

Uratowałeś moją noc, dziękuję, proszę, przyjmij niedźwiedzia któregoś dnia – Erowlin

0

Dzięki za pomoc ludzie!

Dla mnie, po prostu dodanie qwindows.dll do katalogu /platforms jakoś go nie ucięło.
I w końcu wszystko, aby pracować przez dosadnie kopiując cały wtyczek katalogu do katalogu binarnego mojego wniosku i tworzenia pliku qt.conf o następującej treści:

[Paths] 
Plugins=./plugins 
2

Qt w tych dniach (jak przynajmniej Qt 5.2 jeśli nie wcześniej) wysyła "windeployqt.exe ", który wskazywał na twój skompilowany program (i, tak jak ja, używasz ich jako dodatkowego argumentu" --qmldir path/to/QML/files "dla programu Qt Quick) powinien wypluć wszystkie wymagane biblioteki DLL w tym samym katalogu, co skompilowany program aktualnie przebywa więc na siebie na lokalnej maszynie budowlanej, na przykład, wpadłem coś wzdłuż linii:.

windeployqt --qmldir C:\Code\AppSource C:\Code\build-msvc2010\release 

To jest z katalogu Qt \ bin w moim $ PATH (lub, jak sądzę w żargonie Windows,% PATH%;)) przy użyciu Qt 5.5, chociaż zrobiłem to samo z powrotem w 5.2 i 5.3.

IIRC jeśli używam MSVC jako kompilatora, który wciąż potrzebowałem skopiuj te biblioteki DLL (w moim przypadku msvc2010, czyli msvcp100.dll i msvcr100.dll) ręcznie, bu Mogłem pamiętać źle.

+0

windeployqt powinien utworzyć plik vcredist_x86.exe w folderze wyjściowym, który może być uruchomiony w systemie docelowym. preferowany sposób radzenia sobie z brakującymi plikami msvc100.dll i takimi (jak w marce jest niezadowolony, aby skopiować je ręcznie) ---- Także, jeśli chcesz, aby czystszy zestaw kodu e nowy system możesz sam przenieść plik yourapp.exe do nowego folderu i uruchomić na nim windeployqt, który powinien przynieść tylko te pliki, których faktycznie potrzebujesz na innym komputerze. – jp36

+1

Używając MVC++ 2015, 'windeployqt' nie tworzy vcredist_x86.exe lub plik vcredist_x64.exe! – SuB

Powiązane problemy