В моем ноутбуке:
$ cat /etc/issue
Ubuntu 18.04 LTS \n \l
Есть две разные папки для библиотек x86
и x86_64
:
~$ ls -1 /
bin
lib
lib64
sbin
...
Почему для двоичных файлов существует только один каталог?
PS Я также заинтересован в Android, но я надеюсь, что ответ должен быть таким же.
linux
android
architecture
Gluttton
источник
источник
/bin
и/sbin
там, и там. В чем вопрос? Вы спрашиваете о разнице между/lib
и/lib64
?x86_64
(ни для/bin
не для/sbin
)./bin64
.wine*32
иwine*64
).Ответы:
Во-первых, почему существуют отдельные
/lib
и/lib64
:Filesystem Hierarchy Standard отмечает , что отдельные
/lib
и/lib64
существуют , потому что:На моем Slackware 14.2, например, есть
/lib
и/lib64
каталоги для 32-битных и 64-битных библиотек соответственно, хотя/lib
это и не символическая ссылка, как предполагает фрагмент кода FHS:Есть две
libc.so.6
библиотеки/lib
и/lib64
.Каждый динамически построена ELF двоичный содержит жестко запрограммированный путь к интерпретатору, в этом случае либо
/lib/ld-linux.so.2
или/lib64/ld-linux-x86-64.so.2
:Работа переводчика заключается в загрузке необходимых общих библиотек. Вы можете спросить интерпретатор GNU, какие библиотеки он будет загружать, даже не запуская бинарный файл
LD_TRACE_LOADED_OBJECTS=1
илиldd
оболочку:Как видите, данный интерпретатор точно знает, где искать библиотеки - 32-битная версия ищет библиотеки в,
/lib
а 64-битная версия ищет библиотеки в/lib64
.Стандарт FHS гласит следующее
/bin
:IMO причина, по которой не существует отдельных
/bin
и/bin64
состоит в том, что если бы у нас был файл с одинаковым именем в обоих этих каталогах, мы не могли бы вызвать один из них косвенно, потому что мы должны были бы поместить/bin
или/bin64
сначала в$PATH
.Тем не менее, обратите внимание, что вышесказанное является всего лишь соглашением - ядру Linux на самом деле все равно, если у вас есть отдельные
/bin
и/bin64
. Если вы хотите их, вы можете создать их и настроить свою систему соответственно.Вы также упомянули Android - обратите внимание, что кроме запуска модифицированного ядра Linux, он не имеет ничего общего с системами GNU, такими как Ubuntu - без glibc, без bash (по умолчанию вы, конечно, можете скомпилировать и развернуть его вручную), а также со структурой каталогов. совершенно другой.
источник
ls -l
примеры не особенно уместны. Что было бы полезно, так это выводls -l /lib /lib64
, который, вероятно, показывает, что/lib
он является символической ссылкой.ls -ld
, и нет,/lib
это не символическая ссылка в моейSlackware 14.2
системе.dfd029d25c58831bc5db671aec99a36f /lib64/libc.so.6
,987e7b736f316cc8da87ca2f38dae93e /lib/libc.so.6
.Причина в том, что каталоги lib / lib64 могут содержать файлы с одинаковыми именами, потому что это библиотеки, используемые в разных программах. Размещение их в отдельных каталогах решает конфликт. Нет (обычно ...) веских причин для распределения исполняемых файлов с одинаковыми именами в одной и той же системе, которые являются 32/64-битными, но, поскольку может быть смесь исполняемых файлов, необходимо предоставить общие библиотеки.
источник