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:
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
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
