ldconfig игнорирует некоторые файлы в / usr / local / lib /

При попытке запустить определенную программу я получил следующее сообщение об ошибке:

ошибка при загрузке общих библиотек: foo.so.0: невозможно открыть общий объектный файл: такого файла или каталога нет

Поэтому я собрал необходимую библиотеку и установил ее в каталог /usr/local/lib/. Однако после создания библиотеки в разделе /usr/local/lib/ были только файлы foo.so, foo.so.1 и foo.so.1.0.8. Поэтому я создал дополнительную символическую ссылку на foo.so.1.0.8 с именем foo.so.0. Я проверил, что /usr/local/lib включен в некоторый файл в /etc/ld.so.conf.d/ и начал sudo ldconfig.

К сожалению, ldconfig, кажется, игнорирует мою собственную символическую ссылку. ldconfig -v печатает только следующую строку:

foo.so.1 -> foo.so.1.0.8

ldconfig -p печатает только следующие две строки :

foo.so.1 (libc6, x86-64) => /usr/local/lib/foo.so.1

foo.so (libc6, x86- 64) => /usr/local/lib/foo.so

В файле нет слепого бита foo.so.0. Что мне делать?

1
задан 19 February 2014 в 03:25

2 ответа

TL: DR: по возможности используйте версию (или сборку) программы, которая поддерживает версию установленной библиотеки.

Как говорит bodhi.zazen , трудно точно понять, что происходит, без конкретных точных команд, которые вы выполняли, и вывода. Однако нельзя ожидать, что foo.so.0 и foo.so.1 будут совместимы.

Чтобы программа, скомпилированная для использования основной версии 0 библиотеки, работала с основной версией 1, желательно пересобрать (перекомпилировать и перекомпоновать) программу. Кроме того, интерфейс, предоставляемый библиотекой программам, может изменяться и часто меняется в основных версиях, так что это только иногда практично.

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

В качестве альтернативы, если вы можете установить старую версию библиотеки вместе с новой, это также может заставить программу работать. (Если вы уверены, что никакая другая программа не использует текущую установленную версию библиотеки, вы можете удалить ее перед установкой старой. Если она предоставляется пакетом Ubuntu, то вы можете сделать это, удалив этот пакет. Разное основные версии библиотеки часто поддерживают одновременную установку .)

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

1113 Этот ответ намеренно общий. Без более подробной информации о , для чего программе нужна библиотека, как программа (или может быть установлена) и какие версии библиотеки она поддерживает, возможно, будет невозможно дать более подробный совет.

0
ответ дан 19 February 2014 в 03:25

Из того, что я помню в Ubuntu, простого добавления символических ссылок в / usr / local / lib может быть недостаточно. Нам нужно обновить соответствующую запись ld.so.conf, чтобы ldconfig знал, какие символические ссылки он должен создать для нас.

Как упомянуто bodhi.zazen, установка из apt проще, потому что apt очень вероятно также настроит файлы ld.so.conf.

0
ответ дан 19 February 2014 в 03:25

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

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