Qt Deployment, czyli tworzenie wersji release ze wszystkimi plikami *.dll

QT Creator domyślnie tworzy aplikacje z linkowaniem dynamicznym (shared). Jeśli korzystamy z darmowej, otwartoźródłowej wersji QT to jest to zgodnie z licencją jedyna opcja. W związku z tym razem z publikowanym plikiem *.exe projektu trzeba dostarczyć skompilowane pliki biblioteki od których jest on zależny. Pomoże nam w tym windeployqt.exe (Qt Deployment Tool) znajdujący się w katalogu Qt\Qt5.8.0\5.8\msvc2015_64\bin. Odpalamy ten plik w cmd.exe, jako argument podając ścieżkę do pliku wykonywalnego projektu, np. C:\QT Projects\nonograms\app\release\project1.exe. Po tej operacji w folderze release znajdują się wszystkie pliki potrzebne do działania aplikacji, a nawet więcej. Aby usunąć niepotrzebne pliki wystarczy odpalić aplikację project1.exe i w czasie jej działania spróbować usunąć pozostałe pliki z folderu. Niepotrzebne pliki powinny zostać usunięte a wymagane przez aplikację zostaną pominięte. Sposób ten opisany jest tutaj: Deploy an Application on Windows

cd C:\Qt\Qt5.8.0\5.8\msvc2015_64\bin
windeployqt.exe "C:\QT Projects\nonograms\app\release\nonograms.exe"

Więcej na stronie QT: Qt for Windows – Deployment

4 myśli nt. „Qt Deployment, czyli tworzenie wersji release ze wszystkimi plikami *.dll

  1. Bartosz

    Z tego, co mi się obiło o uszy, to można jeszcze za darmo linkować statycznie o ile program będzie na licencji GPL lub LGPL, ale mogę się mylić

    Odpowiedz
    1. ololukiXP Autor wpisu

      Chyba masz rację. Można linkować statycznie, ale nasz kod musi być wtedy na licencji GPL lub LGPL i trzeba bezwzględnie udostępnić kod źródłowy. Przy linkowaniu dynamicznym można nie udostępniać kodu źródłowego naszej aplikacji, jednak trzeba dostarczyć treść licencji oraz prawdopodobnie kod źródłowy samego Qt oraz ewentualnych zmian, jakie wprowadziliśmy do bibliotek Qt (np. patchy). Generalnie z prawnego punktu widzenia bezpieczniej jest linkować dynamicznie.

      Można linkować statycznie, ale musimy wtedy udostępnić nasz program w postaci obiektowej, tak, aby użytkownik miał możliwość zlinkowania go z inną/zmodyfikowaną wersją biblioteki.
      Jeśli linkujemy dynamicznie do biblioteki, którą użytkownik ma już zainstalawaną w systemie, wtedy nie trzeba udostepniać źródeł ani licencji biblioteki. Ale jeśli dystrubujemy binarki biblioteki (zlinkowane statycznie lub dynamicznie) to musimy zawsze dostarczyć treść licencji oraz kod źródłowy samej biblioteki oraz ewentualnych zmian, jakie wprowadziliśmy do tych bibliotek (np. patchy). gnu.org FAQ – LGPLStaticVsDynamic

      Odpowiedz

Skomentuj Bartosz Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany.