[Qt] Dołączyć biblioteki do programu.
-
- 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.
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?
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?
- DDAroo
- 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.
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.
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.
-
- 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.
Dzięki za odp.
Czyli mają zostać w katalogu programu czy mam zrobić jakąś instalkę, która je wrzuci do /usr/lib?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
Chyliłbym się właśnie ku takiemu rozwiązaniu, ale jak to zrobić?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.
-
- 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.
Ech, no dobra - rozpiszę się
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:
$$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
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:
- 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

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}\'
Kod: Zaznacz cały
ldd /sciezka/do/skompilowanego_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
Mam nadzieję, że bardzo nie namotałem

[IMG]http://www.ubudsl.com/media/UbuDSL.png[/IMG]
Masz problem z UbuDSL? Nie zapomnij wygenerować i załączyć loga do postu!
Masz problem z UbuDSL? Nie zapomnij wygenerować i załączyć loga do postu!
-
- 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.
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).

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).
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 18 gości