QT problem z uruchomieniem aplikacji pod Windows

0

Witam!

Mam problem z uruchomieniem programu napisanego w QT pod Windowsem. W QTCreatorze działa pięknie, ale chcę go uruchomić poza nim. Więc odpalam execa i woła o biblioteki .dll. Więc wrzucam je do tego samego folderu i komunikat się zmienia na "Nie znaleziono punktu wejścia procedury: <tu jakiś dziwny ciąg znaków> w bibliotece QtCore4.dll".

Żeby to naprawić, przeszukałem folder instalacyjny QTSdk i znalazłem QtCore4.dll w innym miejscu, podmieniłem i komunikat dalej wyskakuje, ale nazwa procedury jest inna.
Co ciekawe, z tymi bibliotekami w folderze z exekiem program przestaje działać nawet w QtCreatorze.

Co jeszcze ciekawsze, nagrałem projekt na pendriva i skompilowałem go w QtCreatorze pod Linuksem, tam plik wykonywalny działa bez problemu, nawet po przeniesieniu samego tylko tego pliku na inny komputer, bez zainstalowanego QT.

Na forum przeczytałem wiele tematów o uruchamianiu programów w QT po Win, ale żaden mi nie pomógł.

Win7, 64bit

pozdrawiam,
Krzychu

1

Dopisz do systemowej zmiennej PATH ścieżkę do TwójFolderZQt\bin

0

Zwróć uwage czy kompiluje w trybie debug czy release. Pliki .dll się różnią.

0

MasterBLB, dziękuję za bardzo szybką odpowiedź ;]

owszem, sztuczka z PATH pomogła, ale nie mam pojęcia dlaczego, skoro to te same biblioteki.

poza tym, to nie rozwiązuje problemu, gdy chcę komuś ten program przekazać. Jakieś pomysły?

EDIT:
djszalas - ten sam problem pojawia się zarówno w trybie debug, jak i release

0

Plik exe trzeba dostarczyć z odpowiednimi bibliotekami dll i wymaganymi pluginami, jeśli zostały jakieś użyte w programie. Polecam lekturę:
http://developer.qt.nokia.com/doc/qt-4.8/deployment-windows.html

Jest tam też opis fajnego programu - Dependency Walker - bardzo mi się przydał, gdy musiałem zrobić deploy aplikacji, używającej plugina do Postgres'a. Sporo musiałem się nakopiować bibliotek :)

0

Zwróć uwagę, aby biblioteki były z tego samego folderu (bin ALBO lib nie może być LUB).

0

postanowiłem spróbować linkowania statycznego, ale to co napotkałem na swoim dysku ma niewiele wspólnego z poradnikiem http://bexlab.pl/linkowanie-statyczne-qt-sdk-for-windows/132/ ani z poradnikiem na stronie Nokii (http://developer.qt.nokia.com/doc/qt-4.8/deployment-windows.html).

U mnie jest katalog QtSDK,a w nim m.in. QtCreator, Desktop, itd. Biblioteki dll (QtCore4 itp) są w wielu miejscach, sam kreator korzysta z tych w Desktop/qt/4.7.4/mingw/...
Generalnie struktura folderów nie odpowiada tym z poradników. Przeinstalować Qt na inną wersję czy po prostu czegoś nie wiem?

3

Co do dllek Qt,to potrzeba tak:
1)Zawsze musi być QtCore4.dll
2)Jeśli aplikacja opiera się o GUI to i QtGui4.dll (te 2 to taki zestaw minimum dla aplikacji okienkowych)
3)Jeśli robisz coś z sieciami to QtNetwork4.dll
4)Jeśli operujesz na bazie danych to QtSql4.dll,a ponadto w YourAppFolder\plugins\sqldrivers zawierającym plik wykonywalny musi się znaleźć odpowiedni driver,na przykład dla SQLite będzie to qsqlite4.dll
5)Jeśli program bawi się obrazkami .jpg,to w YourAppFolder\imageformats trzeba wrzucić qjpeg4.dll
6)Ścieżkę z 4 i 5 (w których program napisany w Qt domyślnie szuka wspomnianych pluginów) możesz zmienić poprzez QCoreApplication::setLibraryPaths()
7)Podobnie jest z resztą dllek takich jak QtXml4.dll itd

UWAGA-wszystkie te dllki występują w 2 wersjach:release (nazwy co podałem) i debug (nazwa kończy się na d,np QtCored4.dll).Do swojej aplikacji dodawaj zatem wersje release,chyba że sama aplikacja jest skompilowana jako debug.

Położenie dllek:
kutowskie moduły Core,GUI itd w YourQtFolder\bin
pluginy do baz danych i inne takie w YourQtFolder\plugins i tam w podfolderach szukaj

UWAGA2-skoro używasz całego SDK,foldery zarówno bin jak i plugins mogą siedzieć nieco głębiej niż podałem.

0

MasterBLB, dzięki za cierpliwość i pomoc ;]

przeszukałem cały folder QtSDK i napotkałem mały problem. W folderach mingw/bin są dwa rodzaje zawartości, albo są biblioteki .dll te od QT i pliki wykonywalne typu Assistant, Desiner, Linguist, jest też qmake.exe, albo pliki kompilatora mingw32-g++, -gcc, -make. mingwm10.dll jest w obu.

Moim celem jest możliwość zwykłej kompilacji debug (dynamicznej), a jak już skończę aplikację przekompilować ją statycznie w trybie release do jednego pliku .exe.
Jest możliwe do osiągnięcia w jakiś łatwy(ewentualnie tylko przystępny ;]) sposób w tym środowisku?
Rozumiem że wiąże się to z przekompilowaniem QT na wersję statyczną, do czego warto wykonać kopię. Tylko co skopiować?

1

Jest,podał ci linka Hostel w którym jest opisane jak kompilować statycznie z bibliotekami Qt.
Tyle,że imo nie ma co się szczypać,kłopotu z tym więcej,nadto MUSISZ wówczas swój kod udostępnić na licencji GNU.Na co ci to?

0

szczerze mówiąc na nic ;]
no ale wtedy powraca problem uruchomienia z bez linkowania statycznego na innym komputerze.
wiesz może dlaczego zadziałała sztuczka z PATH? w końcu kopiowałem dokładnie te same biblioteki

EDIT: nie chciałem odpowiadam sam sobie więc edytuję

otworzyłem program za pomocą tego Depedency Walker i pokazuje dokładnie te same błędy z ustawioną PATH do Qt, jak i gdy biblioteki są w folderze z aplikacją. Ale wtedy nie działa. Wie ktoś dlaczego? Już mniejsza z odpalaniem mojego programu na innych kompach, ale dlaczego on w ogóle działa?!

w załączniku screen z Dependency Walker
wiem że nie widać na nim wszystkiego, ale nie wiem w sumie na co zwrócić uwagę. Może ktoś po prostu wie o co chodzi, jeśli nie, temat myślę do zamknięcia ;]

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.