показывает, что он включен /lib/i386-linux-gnu/libc.so.6, но сценарий, который я выполнял, ожидал, что он будет находиться непосредственно под ним /lib, так почему нет хотя бы символической ссылки?
Рискну ли я что-нибудь сломать, если добавлю туда ссылку?
libc.soбыл перенесен как часть многоархивной работы в Ubuntu 11.04. Причина, по которой здесь не может быть символической ссылки, заключается в том, что цель multiarch состоит в том, чтобы сделать возможным одновременную установку как версий, так i386и amd64версий, libcчтобы вы могли легче запускать 32-разрядные двоичные файлы в 64-разрядных системах и наоборот (и другие подобные ситуации). Если libc6пакет содержал символическую ссылку на новое местоположение, то версии этого пакета для разных архитектур не могли бы быть установлены одновременно (какую версию символической ссылки dpkgвыберет?), Что нанесло бы ущерб всей цели упражнения.
Все, что жестко кодирует путь, libc.soдолжно быть обновлено для правильной работы начиная с Ubuntu 11.04 и далее. Если скрипт, о котором вы говорите, является частью Ubuntu, пожалуйста, сообщите об ошибке и добавьте multiarchтег.
Хороший ответ, узнал что-то новое сегодня (снова) :)
Лекенштейн
1
Процессор, который я использую, даже не поддерживает 64-битные инструкции. Вы сказали бы, что есть какой-нибудь риск, связанный с добавлением символической ссылки вручную? Не уверен, что мне нужно это делать, но если. Во всяком случае, это, кажется, правильный ответ. Спасибо.
Эрик Б
@ Эрик Б: что? Вы говорите мне, что пытаетесь использовать 64-разрядное приложение на 32-битном процессоре? Это точно не сработает. 32-битные приложения работают нормально на 64-битном процессоре, но не наоборот.
Лекенштейн
@Lekensteyn, это точно не то, что я говорю. Я говорю о том, что мне не нужна 64-битная библиотека. Поэтому в моей конкретной системе не возникнет путаницы в отношении того, /lib/libc.so.6является ли библиотека 32- или 64-разрядной.
Эрик Б
3
Если вы никогда не собираетесь использовать 64-битные пакеты, я сомневаюсь, что есть какой-то значительный риск при добавлении символической ссылки, нет.
Колин Уотсон
10
Динамические библиотеки загружаются ядром, пути не жестко закодированы в программе. Программа просто говорит: «Мне нужен libc.so.6». Затем система выполняет поиск в путях к библиотекам, как определено в /etc/ld.so.conf, в том числе /usr/libи /libпо умолчанию. Этот файл включает в себя дополнительные файлы конфигурации в /etc/ld.so.conf.d.
В моей 64-битной системе libc.so.6можно найти /lib/x86_64-linux-gnu/libc.so.6из-за пути, определенного в /etc/ld.so.conf.d/x86_64-linux-gnu.conf:
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
Чтобы узнать, какая библиотека загружена программой, используйте lddкак в ldd /bin/bash:
Размещение символической ссылки ничего не сломает, но и ничего хорошего не даст, верно?
Эрик Б
@Erik B: на какую программу / скрипт вы ссылаетесь? Я могу понять, что сценарий запутался, потому что путь жестко закодирован. Но программа не должна знать путь.
Лекенштейн
Это так работает? У меня иногда возникают проблемы, когда программы не могут найти установленные библиотеки /usr/local/lib, но они работают нормально, если я создаю символическую ссылку /usr/lib. Что вызывает это поведение?
@Lekensteyn: Конечно: pastebin.com/dtfnw2Tv . Это произошло с некоторыми программами практически на любой системе, которую я использовал, поэтому я предположил, что это не связано с конфигурацией системы.
crazy2be
5
Просто добавьте символическую ссылку в файл libc.so.6 следующим образом:
/lib/libc.so.6
является ли библиотека 32- или 64-разрядной.Динамические библиотеки загружаются ядром, пути не жестко закодированы в программе. Программа просто говорит: «Мне нужен libc.so.6». Затем система выполняет поиск в путях к библиотекам, как определено в
/etc/ld.so.conf
, в том числе/usr/lib
и/lib
по умолчанию. Этот файл включает в себя дополнительные файлы конфигурации в/etc/ld.so.conf.d
.В моей 64-битной системе
libc.so.6
можно найти/lib/x86_64-linux-gnu/libc.so.6
из-за пути, определенного в/etc/ld.so.conf.d/x86_64-linux-gnu.conf
:Чтобы узнать, какая библиотека загружена программой, используйте
ldd
как вldd /bin/bash
:Размещение символической ссылки ничего не сломает.
Чтобы получить список каталогов, в которых выполняется поиск, выполните:
-v
вызывает отображение списка файлов и каталогов,-N
предотвращает/etc/ld.so.cache
повторное создание cache ( ).источник
/usr/local/lib
, но они работают нормально, если я создаю символическую ссылку/usr/lib
. Что вызывает это поведение?ldconfig -v -N | grep '^/'
?Просто добавьте символическую ссылку в файл libc.so.6 следующим образом:
То же самое касается других отсутствующих файлов, которые все еще находятся в системе, в моем случае Matlab пропустил файл, проблема исчезла.
источник