2011-11-29 21 views
13

Szukałem w Internecie pewnych użytecznych i jasnych informacji na ten temat, to denerwujące, że tak banalna rzecz jest tak trudna do zrobienia.Jak utworzyć plik wykonywalny dla aplikacji Qt?

Potrzebuję utworzyć plik wykonywalny dla mojego projektu Qt, aby uruchomić go na innych komputerach. Mój projekt działa ładnie w Qt Creator, ale kiedy próbuję uruchomić plik wykonywalny utworzony w folderze wydania, dostaję błędy dotyczące niektórych bibliotek dll, a mimo to umieściłem je wszystkie w tym samym katalogu .exe mam teraz trochę błędy dotyczące punktów wejścia w procedurach wewnątrz biblioteki DLL (QtCore4.dll).

Rozwiązanie wygląda jak statyczne łącze, znalazłem wiele informacji na ten temat, ale żadne z nich naprawdę mi nie pomogło. Oto, co próbowałem do tej pory:

  • Użycie pliku wykonywalnego utworzonego w folderze wydania, jak już powiedziałem.
  • Łączenie statyczne, po tym samouczku (i wielu innych, prawie to samo): http://doc.qt.io/qt-4.8/deployment-windows.html, ale pojawia się następujący błąd podczas "configure -static": NMAKE: błąd krytyczny U1077: "" c: \ Arquivos de programas \ Microsoft Visual Studio 9. 0 \ VC \ BIN \ cl.EXE "": kod powrotu "0x2 ' Stop. QMake budynku nie powiodła się, kod zwrotny 2

Do tego nie mogłem znaleźć żadnego rozwiązania, więc tutaj jestem, po prostu staramy się utworzyć plik wykonywalny dla mojego projektu Qt, nadzieję, że może wy mi dać trochę światła tutaj .

+0

Zobacz ten powiązane pytanie http://stackoverflow.com/questions/1011197/qt-static-linking-and-deployment/1654833#1654833 –

+0

Znalazłem go wcześniej, ale mam błąd nUpewnij: śmiertelny błąd U1077: "" c: \ Arquivos de programas \ Microsoft Visual Studio 9. 0 \ VC \ BIN \ cl.EXE "": kod powrotu "0x2" Zatrzymaj. Budowanie qmake nie powiodło się, kod powrotu 2 Kiedy próbuję uruchomić konfigurację i nie mogę znaleźć odpowiedzi na to .. Ale dzięki. –

Odpowiedz

14

Zasadniczo musisz poszukać podfolderu mingw w głąb drzewa qt, gdzie znajdują się narzędzia qt i skopiować potrzebne biblioteki dll.

Oto kroki, które podążam, w oparciu o QT 4.7.4, do pakowania aplikacji z poprawnymi bibliotekami współdzielonymi.

  1. Powiedzmy, że masz zainstalowane QT pod c: \ qtsdk
  2. Otwórz projekt i skompilować je w trybie zwolnienia.
  3. Idź do tego katalogu: C: \ QtSDK \ Desktop \ Qt \ 4.7.4 \ mingw \ bin - zawiera wszystkie udostępnione biblioteki. Debug biblioteki kończyć się na "d" - Frex, QtCore.dll jest wersja release, a QtCoreD.dll jest w wersji debug
  4. Kopiowanie przynajmniej te pliki do katalogu uwalnianiu (gdzie .exe kłamstwa)

    • mingwm10.dll
    • libgcc_s_dw2-1.dll
    • QtCore4.dll
    • QtGui4.dll

    Właśnie zbudowałem, przetestowałem i wdrożyłem fałszywy projekt w ten sposób.

+1

Nie mam tego katalogu (mingw \ bin), prawdopodobnie dlatego, że używam Visual Studio? W każdym razie, skopiuj WSZYSTKIE pliki dll stamtąd do mojego pliku .exe i zadziałało. To nie jest najlepsze rozwiązanie, ale na razie zadziała. Dzięki. –

+1

Możesz rozpocząć usuwanie plików dll jeden po drugim i sprawdzanie, czy program nadal działa. W ten sposób łatwo zorientujesz się, które z nich są potrzebne. Zazwyczaj robię to podczas pracy z zależnościami DLL. – sashoalm

+0

Nie wiem, czy skonfigurować plik .PRO w VS2008, ale niektóre funkcje qt wymagają własnych bibliotek dll. (QtSql itp.). Większość czasu będzie w porządku za pomocą tylko QtCore.dll i QtGui.dll. Gdy korzystasz z zaawansowanych funkcji, takich jak komunikacja sieciowa, sql, webkit itp., Sprawdź dokumentację: prawdopodobnie uzyskasz wskaźniki do używanej biblioteki. Możesz również użyć Dependency Walker, aby zobaczyć, jakie biblioteki DLL potrzebują twój program. –

1

Pobrano Qt SDK i chcesz statycznie połączyć biblioteki Qt z aplikacją, prawda?

Po pierwsze, jeśli łączysz statycznie, nie potrzebujesz żadnego Qt * .dll, aby być obecnym w dowolnym miejscu, ponieważ jest on wbudowany w aplikację. Samo to oznacza, że ​​twoja aplikacja jest zbudowana przy użyciu dynamicznego linkowania.

Z mojego doświadczenia wynika, że ​​najbezpieczniejszym sposobem, aby to wszystko robocza wynosi:

Pobierz źródła Qt, zbudować i zainstalować je z nmake (przy użyciu programu Visual Wiersz Studio polecenia z menu Start -> Application -> Visual Studio 2008) . Pamiętaj tylko, że rozmiar statycznie połączonej aplikacji zależy od rozmiaru pliku * .libs i są one zależne od konfiguracji wstępnej, na przykład możesz zminimalizować rozmiar aplikacji, wyłączając niektóre funkcje (to jest przykładem config dla MacOSX, tylko uważaj na tych specyficznych dla systemu Windows i dodać właściwą plaftorm - patrz configure.exe --help szczegóły):

./configure -arch x86 -platform macx-g++ --universal -cocoa -debug-and-release -opensource -static -fast -no-accessibility -no-sql-sqlite -no-qt3support -no-opengl -no-openvg -qt-zlib -no-gif -no-libmng -qt-libmng -no-libtiff -qt-libjpeg -no-3dnow -sse -no-sse2 -no-openssl -no-dbus -no-phonon -no-multimedia -no-audio-backend -webkit -no-script -no-scripttools -no-declarative -nomake demos -nomake examples -no-exceptions -no-accessibility -confirm-license 

zainstalować, skonfigurować i używać Visual Studio dodatek dla ciebie Qt projektu (here) .

Powodzenia! :)

+0

Należy pamiętać, że łączenie statyczne wymaga licencji lub kodu źródłowego. – paulm

+0

@paulm Dlaczego linkowanie statyczne wymaga licencji? Czy to zależy od Qt? (Jestem nowy, więc pytam) – inblueswithu

+0

To, co nakazuje licencja LGPL/GPL, szukaj tutaj na SO, aby znaleźć szczegóły – paulm

2

Oto co zrobiłem i dostałem go do pracy po pewnym czasie, po upewnieniu się, że twój program buduje wewnątrz Qtcreator, przejdź do katalogu, który zawiera twój exe i kliknij go dwukrotnie. (Używam Windows i nie wiem, czy jest taki sam na innych platformach). Okno powinno wyskakujące, informujące, który plik .dll nie istnieje. Przejdź do katalogu, w którym zainstalowano Qt, i wpisz dokładną nazwę w pasku wyszukiwania (w prawym górnym rogu w Windows 7), a biblioteka dll powinna pojawić się w wynikach wyszukiwania. Kliknij prawym przyciskiem myszy i wybierz lokalizację otwartego pliku. Skopiuj plik, w którym znajduje się twój plik exe. Kliknij dwukrotnie na exe. Jeśli brakuje innego pliku .dll, powtórz to samo, aż żadne nie zostanie missing.W końcu powinien działać twój program. Mam nadzieję, że to pomoże.

Powiązane problemy