Почему я не могу установить несколько версий общей библиотеки?

Это пишет, пока диск не полон (обычно существует все еще некоторое пространство, зарезервированное для пользователя root). Но поскольку пул случайных данных ограничен, это могло требовать времени.

При необходимости в определенном количестве случайных данных использовать dd. Для 1 МБ:

dd if=/dev/random iflag=fullblock of=$HOME/randomFile bs=1M count=1

Другие возможности упоминаются в ответах на связанный вопрос.

Однако почти во всех случаях лучше использовать /dev/urandom вместо этого. Это не блокируется, если ядро думает, что выходит из энтропии. Для лучшего понимания можно также прочитать мифы о/dev/urandom.

Установка haveged убыстряется /dev/random и также предоставляет больше энтропии /dev/urandom.

Править: dd потребности fullblock опция как/dev/random (в противоположности /dev/urandom) может возвратить неполные блоки, если энтропийный пул пуст.

Если Ваш dd не поддерживает единицы, выписывает им:

dd if=/dev/random iflag=fullblock of=$HOME/randomFile bs=1048576 count=1

10
16.06.2015, 01:27
2 ответа

Фактически, вы можете установить несколько версий разделяемой библиотеки, если все будет сделано правильно.

Общие библиотеки обычно называются следующим образом:

lib<name>.so.<api-version>.<minor>

Далее, есть символические ссылки на библиотеку под следующими именами:

lib<name>.so
lib<name>.so.<api-version>

Когда разработчик устанавливает ссылку на библиотеку для создания двоичного файла, имя файла заканчивается на .so , который найдет компоновщик. Действительно, для любого заданного одновременно может быть только один из них, но это означает лишь то, что разработчик не может одновременно настраивать несколько разных версий библиотеки. Для менеджеров пакетов эта символическая ссылка .so является частью отдельного пакета -dev , который необходимо установить только разработчикам.

Когда компоновщик находит файл с именем, оканчивающимся на .so и использует его, он ищет внутри этой библиотеки поле с именем soname . Soname сообщает компоновщику, какое имя файла вставить в результирующий двоичный файл и, таким образом, какое имя файла будет искать во время выполнения. Предполагается, что для soname установлено значение lib .so. .

Следовательно, во время выполнения динамический компоновщик будет искать lib .so. и использовать его.

Предполагается, что:

  • <второстепенное> обновления не изменяют API библиотеки, и когда <второстепенный> переводится на более высокую версию, можно безопасно разрешить все двоичные файлы обновляются до новой версии.Поскольку все двоичные файлы ищут библиотеку под именем lib .so. , которое является символической ссылкой на последнюю установленную lib .so. . , они получают обновление.
  • обновления изменяют API библиотеки, и небезопасно позволять существующим двоичным приложениям использовать новую версию. В случае изменения , поскольку эти приложения ищут имя lib .so. , но с другим значением для они не получат новую версию.

Менеджеры пакетов не часто упаковывают более одной версии одной и той же библиотеки в одну версию дистрибутива, потому что весь дистрибутив, включая все двоичные файлы, которые используют библиотеку, обычно компилируется для использования согласованной версии каждой библиотеки перед раздача выпущена. Убедиться, что все согласовано и что все в дистрибутиве совместимо со всем остальным, является большой частью рабочей нагрузки для дистрибьюторов.

Но вы можете легко получить несколько версий библиотеки, если вы обновили свою систему с одной версии вашего дистрибутива до другой и все еще имеете некоторые старые пакеты, требующие более старых версий библиотеки. Пример:

  • libmysqlclient16 из более ранней версии Debian, содержит libmysqlclient.so.16.0.0 и символическую ссылку libmysqlclient.so.16 .
  • libmysqlclient18 из текущего Debian, содержит libmysqlclient.so.18.0.0 и символическая ссылка libmysqlclient.so.18 .
11
27.01.2020, 20:01

Эта функция не запрещена, просто она не очень распространена из-за способа нумерации большинства библиотек и из-за неудобства изменения имени пакета.

Если используется схема номеров версий с точками X.Y.Z. «Микро» версия Z часто изменяется при исправлении ошибок, «второстепенный» номер Y изменяется при изменении обратной совместимости , а «основной» номер версии X должен изменяться при изменении API (а иногда и при изменении основных дополнительных функций ).

Никогда не должно быть причин, по которым вы не хотите исправлять последние ошибки, а изменения с обратной совместимостью также не должны нарушать работу вашего программного обеспечения.

Если библиотека разработана таким образом, вы всегда сможете заменить X.Y.Z на X. (Y + m). (Z + n). для любых заданных m и n. Т.е. у вас всегда должна быть возможность заменить свою библиотеку последней версией той же серии основных номеров. И если разработчики библиотеки осторожны и совместимость со следующим основным номером (например, объявив об устаревании, но не удалении их пока нет) вы даже можете использовать следующее старшее число.

Для разработчиков пакетов это означает, что они могут использовать имя только с одним или даже без числового имени, чтобы предоставить вам последнюю версию, просто обновив пакет. Если они отправляют библиотеку в пакете abc2 , то им придется пройти через обручи, чтобы перенести свое собственное программное обеспечение, которое полагалось на abc2 для обновления до использования abc3 , иногда с переходными пакетами.Удобнее не указывать основной номер версии библиотеки, если это работает для большинства зависимых пакетов. Таким образом, даже если и abc2 , и abc3 должны быть доступны в какой-то момент в дистрибутиве, abc3 часто называется abc (точно так же, как abc2 вызывался, когда еще не было abc3 ), и как только пакеты не зависят на abc2 внутри распределения становится возможным полностью отбросить abc2 .

Схема нумерации не соблюдается единообразно, но я могу только представить, что с появлением Интернета, распространяющего информацию о том, как использовать такую ​​схему, и давления со стороны пользователей библиотеки (включая разработчиков дистрибутива), чтобы они делали важные вещи, например Совместимость, ясная без необходимости читать файл CHANGES, включенный в библиотеку, способствовала тому, что это стало более распространенным.

Одним из примеров счетчика, но не библиотеки, является интерпретатор python, который несовместим по своим разделяемым объектам и формату травления при незначительном изменении номера. Поэтому вы увидите пакеты для python (последний из серии 2.7) и python3 (последний из в настоящее время серии python3.4), а также явные пакеты для python 2.6 (не становятся менее распространенными), а также для python 3.3.

4
27.01.2020, 20:01

Теги

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