Упаковка:/usr/lib по сравнению с/usr/lib / *-linux-gnu

Я создавал новую версию Специи в контейнере LXC, главным образом для экспериментирования. Однако одна странная вещь, с которой я встретился, была этим make install установленный libspice-server.so.1.9.0 в /usr/lib. Результатом был противный segfault при использовании драйвера QXL из-за факта это libspice-server.so.1.8.0 из репозиториев был расположен в /usr/lib/x86_64-linux-gnu, который имеет более высокий приоритет в ldconfig. Так, это динамично связывало более старую версию библиотеки с более новым кодом - отрицательный результат.

Так или иначе это получило меня взгляды: Кроме ldconfig упорядочивание (то, которое я не думаю, имеет какое-либо отношение к нему) является там функциональным или философским различием между размещением библиотеки в /usr/lib по сравнению с размещением библиотеки в /usr/lib/{x86_64,i386}-linux-gnu?

Я понимаю потребность в отдельном /usr/lib/i386-linux-gnu и /usr/lib/x86_64-linux-gnu каталоги из-за Debian, не использующего /usr/lib /usr/lib32 иерархия используется некоторыми другими дистрибутивами. Но, сделайте библиотеки, которые находятся непосредственно в /usr/lib имеет некоторое специальное значение, или это просто для назад совместимости, возможно?

6
задан 16 January 2017 в 00:34

2 ответа

В Debian и Ubuntu, и действительно FHS, /usr/lib и варианты "принадлежит" поставщику. В этом случае это означает Ваше распределение. Вы не должны помещать файлы туда сами вообще. Конечно, можно сделать как Вам угодно, но оснащающий (такие как dpkg) просто перезапишет файлы, которые Вы помещаете туда без запроса, потому что система дизайном рассматривает эти пробелы для пакетов распределения только. Ваша система является Вашей для повреждения, как Вы желаете, но Вы также добираетесь для хранения частей :-)

пространство зарезервированный, чтобы системный владелец/администратор поместил, дополнительные библиотеки в масштабе всей системы /usr/local/lib. Это находится в FHS, так должно быть доступно и настроено через все уважающие стандарты дистрибутивы. Восходящее программное обеспечение должно иметь make install библиотеки места там по умолчанию.

... там функциональное или философское различие между размещением библиотеки в/usr/lib по сравнению с размещением библиотеки в/usr/lib/{x86_64, i386} - гну Linux?

пакетам Распределения, которые используют /usr/lib, нельзя было установить различную архитектуру сразу (такую как i386 по сравнению с amd64), на который, поскольку указали другие, полезно для рабочих столов, запускающих и 32-разрядное и 64-разрядное программное обеспечение, и для разработчиков, выполняющих код, созданный для другой архитектуры эмуляцией. Это - единственная причина подкаталогов мультидуги.

то же относится к библиотекам, которые Вы устанавливаете сами. Делаете ли Вы это в /usr/lib или /usr/local/lib, Вы не сможете иметь несколько архитектуры, поддерживаемой одновременно. Можно всегда добавлять пути мультидуги как /usr/local/lib/{x86_64,i386}-linux-gnu к /etc/ld.so.conf.d/ для включения этого, конечно.

4
ответ дан 23 November 2019 в 07:49

Вы правы в традиционной системе, в которой были установлены все библиотеки /usr/lib. Поскольку Вы уже упомянули, то, что пользователям нравится выполнять 32-разрядные двоичные файлы на 64-разрядных платформах, является одной из причин разделить библиотеки их архитектурой. Этот подход известен как Мультидуга (по крайней мере, в мире Debian).

Кроме того, разработчикам нравится устанавливать libaries другой архитектуры (как ARM), чтобы кросс-скомпилировать их приложения.

FHS рекомендует поместить 32-/64-bit libaries в папки /usr/lib{32,64}. Этот подход довольно негибок, поскольку нет никакой поддержки другой архитектуры (например, ARM). Там даже существуют несколько 64-разрядных ABIs, которые не совместимы друг с другом и закончились бы в той же папке.

Дополнительная информация:

2
ответ дан 23 November 2019 в 07:49

Другие вопросы по тегам:

Похожие вопросы: