W moim laptopie:
$ cat /etc/issue
Ubuntu 18.04 LTS \n \l
Istnieją dwa różne foldery dla bibliotek x86
i x86_64
:
~$ ls -1 /
bin
lib
lib64
sbin
...
Dlaczego dla plików binarnych istnieje tylko jeden katalog?
PS Interesuję się także Androidem, ale mam nadzieję, że odpowiedź powinna być taka sama.
linux
android
architecture
Gluttton
źródło
źródło
/bin
i/sbin
tam. Jakie jest pytanie? Czy pytasz o różnicę między/lib
i/lib64
?x86_64
(ani dla/bin
nie dla/sbin
)./bin64
.wine*32
iwine*64
).Odpowiedzi:
Po pierwsze, dlaczego istnieją osobne
/lib
i/lib64
:Filesystem Hierarchy Standard wspomina, że oddzielne
/lib
i/lib64
istnieją, ponieważ:Na przykład w moim Slackware 14.2 są
/lib
i/lib64
katalogi dla bibliotek 32-bitowych i 64-bitowych, chociaż/lib
nie jest tak dowiązaniem symbolicznym, jak sugerowałby fragment kodu FHS:Istnieją dwie
libc.so.6
biblioteki w/lib
i/lib64
.Każdy dynamicznie zbudowany ELF binarny zawiera Hardcoded ścieżkę do interpretera, w tym przypadku albo
/lib/ld-linux.so.2
albo/lib64/ld-linux-x86-64.so.2
:Tłumacz ma za zadanie załadować niezbędne biblioteki współdzielone. Możesz zapytać interpretera GNU, jakie biblioteki by załadował, nawet bez uruchamiania pliku binarnego
LD_TRACE_LOADED_OBJECTS=1
lubldd
opakowania:Jak widać, dany tłumacz dokładnie wie, gdzie szukać bibliotek - wersja 32-bitowa szuka bibliotek w,
/lib
a wersja 64-bitowa szuka bibliotek/lib64
.Standard FHS mówi, co następuje
/bin
:IMO jest powodem, dla którego nie ma oddzielnych plików
/bin
i/bin64
jest to, że gdybyśmy mieli plik o tej samej nazwie w obu tych katalogach, nie moglibyśmy wywołać jednego z nich pośrednio, ponieważ musielibyśmy umieścić/bin
lub/bin64
najpierw$PATH
.Zauważ jednak, że powyższe to tylko konwencja - jądro Linuksa tak naprawdę nie dba o to, czy masz oddzielne
/bin
i/bin64
. Jeśli chcesz, możesz je utworzyć i odpowiednio skonfigurować system.Wspomniałeś także o Androidzie - pamiętaj, że oprócz uruchamiania zmodyfikowanego jądra Linuksa, nie ma to nic wspólnego z systemami GNU, takimi jak Ubuntu - bez glibc, bez bash (domyślnie można go oczywiście skompilować i wdrożyć ręcznie), a także strukturę katalogów jest zupełnie inny.
źródło
ls -l
przykłady nie są szczególnie niemądre. Co by być przydatna jest wyjściels -l /lib /lib64
, które prawdopodobnie wskazują, że/lib
sama jest dowiązaniem symbolicznym.ls -ld
, i nie,/lib
to nie jest dowiązanie symboliczne w moimSlackware 14.2
systemie.dfd029d25c58831bc5db671aec99a36f /lib64/libc.so.6
,987e7b736f316cc8da87ca2f38dae93e /lib/libc.so.6
.Powodem jest to, że katalogi lib / lib64 mogą zawierać pliki o takich samych nazwach, ponieważ są to biblioteki współużytkowane przez różne programy. Umieszczenie ich w osobnych katalogach rozwiązuje konflikt. (Zazwyczaj ...) nie ma dobrego powodu do dystrybucji plików wykonywalnych o tej samej nazwie w tym samym systemie, które są 32/64-bitowe, ale ponieważ może istnieć mieszanka plików wykonywalnych, należy udostępnić biblioteki współdzielone.
źródło