Zwykłe uruchomienie aplikacji windowsowej skompilowanej z użyciem środowiska graficznego Qt4 zwraca błąd związany z brakiem biblioteki qt4core.dll
Środowisko Qt4 jest dość duże, domyślam się, że najpierw pewnie trzeba je zainstalować na maszynie klienckiej.
A co jeśli chciałbym by program działał natychmiast, bez instalacji dodatkowych bibliotek? Czy zwykłe skopiowanie qt4core.dll do folderu z programem rozwiązuje problem? A może jest jakaś specjalna flaga kompilacji by używana część kodu qt4 została wbudowana w exeka statycznie?
tomtao napisał(a)
...A co jeśli chciałbym by program działał natychmiast, bez instalacji dodatkowych bibliotek? Czy zwykłe skopiowanie qt4core.dll do folderu z programem rozwiązuje problem?...
Jeśli wrzucenie gt4core.dll do katalogu systemowego rozwiązuje problem, to dodanie jej do katalogu z aplikacją też rozwiąże problem, LoadLibrary() szuka w obu tych miejsach
chyba nie wyczaiłeś o co chodzi w pytaniu "creayze". W pytaniu chodzi o to jak ustawić kompilator albo nie wiem - może linker tak, co by po skompilowaniu kodu program uruchamiał się sam z siebie. bez "dll"-i QT. innymi słowy- kompilator powinien wkompilować w program wszystko co jest mu potrzebne do uruchomienia się.
To dobre pytanie- zwłaszcza że Sam szukam odpowiedzi. :) [browar]
Żadne porządne oprogramowanie nie robi takich rzeczy. Jedyna wątpliwa zaleta to jeden wielki plik exe.
Zaletą posiadania dll jest to, że możesz je uaktualnić bez modyfikowania głównego programu. Qt dba o "binary compabilyty", więc większość aplikacji napisanych i skopilowanych w starszych wersjach Qt powinna działać z nowymi bibliotekami Qt bez rebuilda aplikacji.
ale -
QtCored4.dll to 17.5 MB
QtGui4.dll - 11.9MB
QtGuid4.dll - 71.6MB .
Czy tak ma być? :-/
udek napisał(a)
ale -
QtCored4.dll to 17.5 MB
QtGui4.dll - 11.9MB
QtGuid4.dll - 71.6MB .
Czy tak ma być? :-/
Nie.
Te dwie wystarczą:
QtGui4.dll
QtCore4.dll
Nigdy nie należy umieszczać libów Qt w folderach systemowych. Problem to chociażby różne kompilatory, część softu używającego Qt jest kompilowana CL z VC, inne G++ - kompatybilność pomiędzy nimi zerowa. Tam samo zresztą nie ma gwarancji, że biblioteka skompilowana starą wersją kompilatora będzie poprawnie współpracować z programem skompilowanym nową. Jedyne rozwiązanie to dll-ki Qt w folderze programu, przy poważniejszej zmianie wersji kompilatora wypadałoby SDK dla pewności przekompilować. Kompilacja Qt do bibliotek statycznych zaś ogranicza jego możliwości... Ale cóż, to wszystko można przecież wyczytać z dokumentacji Qt...
mi14chal napisał(a)
udek napisał(a)
ale -
QtCored4.dll to 17.5 MB
QtGui4.dll - 11.9MB
QtGuid4.dll - 71.6MB .
Czy tak ma być? :-/Nie.
Te dwie wystarczą:
QtGui4.dll
QtCore4.dll
jesteś bardzo oszczędny w słowa. masz na myśli zależność między debug a relase - jo?
"mowa jest srebrem, milczenie złotem" [browar]
czy jakoś tak.
Klientowi będziesz dostarczał program w trybie Release, więc dołączasz do programu te dwie dll co ci podałem.
Z mojej strony to wszystko. THNX
Odnowie temat, bo mój problem dotyczy tego samego co ten temat.
Przed przegraniem pliku QtCored4.dll uruchomienie programu (nie z qtcreatora) zwraca błąd:
"The procedure entry point _Z11qt_assert_xPKcS0_S0_i could not be located in dynamic link libraryQtCored4.dll"
Po przegraniu pliku QtCored4.dll do folderu programu komunikat błędu zmienił się na:
"The procedure entry point ?disconnectNotify@QObject@@MAEXPBD@Z could not be located in the dynamic link library QtCored4.dll"
O co tu chodzi ?
Topic ma już 2 lata ale co tam.
W przypadku następującego problemu:
Po przegraniu pliku QtCored4.dll do folderu programu komunikat błędu zmienił się na:
"The procedure entry point ?disconnectNotify@QObject@@MAEXPBD@Z could not be located in the dynamic link library QtCored4.dll"
Wystarczy poszukać innych plików QtCored4.dll i wrzucić je do katalogu z programem - te z katalogów simulator mogą nie działać (tzn. u mnie tak to wygląda).
A tak swoją drogą to witam forum! To mój pierwszy post tutaj