[Qt] Dołączyć biblioteki do programu.

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Macok
Sędziwy Jeż
Sędziwy Jeż
Posty: 85
Rejestracja: 12 sty 2008, 13:40
Płeć: Mężczyzna
Wersja Ubuntu: 7.04
Środowisko graficzne: GNOME

[Qt] Dołączyć biblioteki do programu.

Post autor: Macok »

Napisałem prosty programik w Qt i udostępniłem go kilku znajomym.
Problem w tym, że nawet jeżeli ktoś już ma linuksa to najczęściej nie ma na nim Qt, albo jest jakaś stara wersja.
Zastanawiam się co zrobić żeby program działał u osób, które nie mają Qt?

Kiedyś pisałem w Borland C++ builder i tam wystarczyło zaznaczyć coś w opcjach, a jak jest w Qt?
Awatar użytkownika
DDAroo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 107
Rejestracja: 27 cze 2009, 10:47
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86
Lokalizacja: Kraków
Kontakt:

Odp: [Qt] Dołączyć biblioteki do programu.

Post autor: DDAroo »

W katalogu, w którym znajduje się program musisz dorzucić skompilowane biblioteki Qt. Najczęściej używane to: libQtCore.so oraz libQtGui.so
Pliki te i inne w przypadku instalacji Qt z repozytoriów Synaptica powinny znajdować się w katalogu: /usr/lib
W przypadku ręcznej instalacji trzeba zerknąć do plików readme, gdzie biblioteka się skompilowała.
Jeśli Twoi koledzy zamierzają korzystać z Twojego programu pod linuxem to najlepiej, żeby właśnie zainstalowali sobie bilioteki Qt z repozytoriów, żeby mogły być używane przez wszystkie inne programy bazujące na Qt np OpenOffice 3.0
W przypadku programów kompilowanych pod windowsa do katalogu programu trzeba dorzucić analogiczne pliki skompilowane pod windowsa: libQtCore.dll oraz libQtGui.dll
Ostatnia możliwość to używanie kompilacji statycznej bilbiotek tak, aby były "wbudowywane" w plik wykonywalny programu. Nie jest za często używane z powodu dużych rozmiarów skompilowanego pliku i niemożności użycia bibliotek przez kilka programów.
Macok
Sędziwy Jeż
Sędziwy Jeż
Posty: 85
Rejestracja: 12 sty 2008, 13:40
Płeć: Mężczyzna
Wersja Ubuntu: 7.04
Środowisko graficzne: GNOME

Odp: [Qt] Dołączyć biblioteki do programu.

Post autor: Macok »

Dzięki za odp.
DDAroo pisze:W katalogu, w którym znajduje się program musisz dorzucić skompilowane biblioteki Qt. Najczęściej używane to: libQtCore.so oraz libQtGui.so
Pliki te i inne w przypadku instalacji Qt z repozytoriów Synaptica powinny znajdować się w katalogu: /usr/lib
Czyli mają zostać w katalogu programu czy mam zrobić jakąś instalkę, która je wrzuci do /usr/lib?
DDAroo pisze:Ostatnia możliwość to używanie kompilacji statycznej bilbiotek tak, aby były "wbudowywane" w plik wykonywalny programu. Nie jest za często używane z powodu dużych rozmiarów skompilowanego pliku i niemożności użycia bibliotek przez kilka programów.
Chyliłbym się właśnie ku takiemu rozwiązaniu, ale jak to zrobić?
adrian5632
Przyjaciel
Przyjaciel
Posty: 259
Rejestracja: 17 gru 2006, 16:07
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: [Qt] Dołączyć biblioteki do programu.

Post autor: adrian5632 »

Ech, no dobra - rozpiszę się :P Statycznej kompilacji nie polecam - mam już niejako z tym doświadczenie. Masz do wyboru:
a) Użycie RPATH.
b) Użycie skryptu pomocniczego.

W obu przypadkach musisz skopiować biblioteki do odpowiedniego folderu. Załóżmy, że biblioteki chcesz udostępnić w podfolderze lib. Jak wiesz biblioteki Qt nazywają się odpowiednio wg wzorca libQt[NazwaModułu].so.4.5.1 (4.5.1 to oczywiście przykładowa wersja). Program jest linkowany z biblioteką o wzorcu libQt[NazwaModułu].so.4, tak więc w folderze z aplikacją tworzysz wspomniany folder lib i do niego kopiujesz biblioteki, zmieniając ich pełną nazwę na tę, z jaką są linkowane (pomijamy dowiązania symboliczne).

Teraz omówię sposób z RPATH - RPATH jest to specjalny wpis w pliku wykonywalnym, używany przez linker przy uruchamianiu programu - biblioteki są szukane najpierw w katalogach zapisanych w RPATH. Od razu zaznaczam, że używanie RPATH nie jest zalecane, ale nie będę już opisywał dlaczego. W każdym raziem jest to już mniejsze 'zło', niż kompilacja statyczna.

Aby użyć RPATH, w pliku projektu aplikacji musisz dodać następujący wpis:

Kod: Zaznacz cały

MY_RPATH = \$\$ORIGIN/lib
QMAKE_LFLAGS += -Wl,-z,origin \
    \'-Wl,-rpath,$${MY_RPATH}\'
$$ORIGIN jest specjalnie interpretowanym ciągiem - jest on przy uruchomieniu programu zastępowany ścieżką, w której znajduje się uruchamiany program. QMAKE_LFLAGS dodaje odpowiednie instrukcje dla linkera. Po skompilowaniu programu (jeśli skopiujesz już biblioteki, jak opisałem), po wydaniu polecenia

Kod: Zaznacz cały

ldd /sciezka/do/skompilowanego_programu
Przy wypisanych bibliotekach powinieneś mieć wpisy odnoszące się do bibliotek w podfolderze lib programu.

Teraz skrypt pomocniczy. Tworzysz skrypt, który eksportuje w zmiennej LD_LIBRARY_PATH ścieżkę z twoimi bibliotekami, Załóżmy, że twój program nazywa się mojprogram.bin. Utwórz wtedy skrypt o nazwie mojprogram o następującej treści:

Kod: Zaznacz cały

#!/bin/bash
FOLDER_PROGRAMU=$(basename $1)
export LD_LIBRARY_PATH=$FOLDER_PROGRAMU/lib:$LD_LIBRARY_PATH

$FOLDER_PROGRAMU/mojprogram.bin
- Pod zmienną FOLDER_PROGRAMU znajdzie się ścieżka do folderu, w którym znajduje się twój program. Następnie do zmiennej LD_LIBRARY_PATH (która jest także wykorzystywana przez linker podczas uruchamiania programów) dodajesz na samym początku folder z twoimi bibliotekami. Na koniec uruchamiasz właściwy program. Teraz wystarczy, że użytkownik uruchomi ten skrypt, a program powinien uruchomić się poprawnie.

Mam nadzieję, że bardzo nie namotałem :P
[IMG]http://www.ubudsl.com/media/UbuDSL.png[/IMG]
Masz problem z UbuDSL? Nie zapomnij wygenerować i załączyć loga do postu!
Macok
Sędziwy Jeż
Sędziwy Jeż
Posty: 85
Rejestracja: 12 sty 2008, 13:40
Płeć: Mężczyzna
Wersja Ubuntu: 7.04
Środowisko graficzne: GNOME

Odp: [Qt] Dołączyć biblioteki do programu.

Post autor: Macok »

Wielkie dzięki :)

A którego sposobu radzisz używać?
Mi najbardziej przypadł do gustu ten z RPATH ale skoro jest niezalecany to chyba wybiorę ten ostatni (ze skryptem).
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 18 gości