Dystrybucja plików binarnych z zależnościami w systemie Linux

2

Tworzę aplikację wieloplatformową i mam problem z dystrybucją pliku binarnego systemu Linux. W Windows dll były -libsndfile-1.dll lua5.1.dll lua51.dll openal32.dll sfml-audio.dll sfml-graphics.dll sfml-network.dll sfml-system.dll sfml-window.dll

To jest bardzo wczesna wersja wstępna, więc nie chcę pisać pakietu. Chcę tylko, aby użytkownik pobrał plik tarball i uruchomił plik binarny. Jakie są typowe sposoby uzyskiwania tych zależności w systemie Linux bez pisania pakietu?

PS Mam także system Linux 64-bitowy, a jeden użytkownik zgłosił, że aplikacja nie działała na jego 32-bitowym systemie Linux. Co może być problemem? Nie miałem tego problemu z systemem Windows (zbudowany na systemie 64-bitowym, działa na 32-bitach).

osoba
źródło
1
To powinno przejść do SO.
Shiki,

Odpowiedzi:

2

Nie jestem pewien, czy jest to dokładnie to, czego szukasz, ale zwykle to, co zrobiono w przypadku programów Linux, to lista zależności na stronie internetowej, na której oferujesz produkt do pobrania. W twoim przypadku coś takiego

Musisz zainstalować następujące elementy:

(Oczywiście, podaj również numery wersji, jeśli twój program działa tylko z niektórymi wersjami). Następnie użytkownik systemu Linux sprawdzi swojego menedżera pakietów, aby upewnić się, że ma je wszystkie przed próbą zainstalowania programu.

Niektóre programy są dystrybuowane w sposób wyjaśniony przez Ignacio, tj. Zawierają wszystkie niezbędne zależności w dystrybuowanym archiwum. To trochę denerwuje niektórych ludzi, ponieważ utknęli w dodatkowych kopiach bibliotek, których nie można uaktualnić, a nawet mogą kolidować z wersjami systemowymi.

David Z
źródło
2

Możesz statycznie połączyć program ze wszystkimi bibliotekami oprócz libc i libm. (Cholera, możesz nawet linkować w nich).

zvrba
źródło
1

Odpowiednikiem w systemie Linux jest włączenie plików .so do katalogu w pakiecie i ustawienie skryptu powłoki tak, $LD_LIBRARY_PATHaby wskazywał ten katalog, a następnie uruchomienie binarnego pliku wykonywalnego.

Problem z wersją 32 vs 64 polega na tym, że kompilator generuje 64-bitowy kod i łączy się z bibliotekami 64-bitowymi. Musisz zainstalować 32-bitowy zestaw narzędzi, aby zbudować 32-bitowy plik binarny. Możesz uruchomić fileróżne pliki binarne, aby to potwierdzić.

Ignacio Vazquez-Abrams
źródło
1

Zależności pliku binarnego można uzyskać za pomocą polecenia ldd

Np .:

ldd program_binary

        libctest.so.1 => /opt/lib/libctest.so.1 (0x00002aaaaaaac000)
        libc.so.6 => /lib64/tls/libc.so.6 (0x0000003aa4e00000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003aa4c00000)

Ale lepiej jest udostępniać jako źródło, ponieważ biblioteki lib mogą być w różnych wersjach z różnymi symbolami lub z innej architektury.

nahar
źródło