Ответы:
libc.so
был перенесен как часть многоархивной работы в Ubuntu 11.04. Причина, по которой здесь не может быть символической ссылки, заключается в том, что цель multiarch состоит в том, чтобы сделать возможным одновременную установку как версий, так i386
и amd64
версий, libc
чтобы вы могли легче запускать 32-разрядные двоичные файлы в 64-разрядных системах и наоборот (и другие подобные ситуации). Если libc6
пакет содержал символическую ссылку на новое местоположение, то версии этого пакета для разных архитектур не могли бы быть установлены одновременно (какую версию символической ссылки dpkg
выберет?), Что нанесло бы ущерб всей цели упражнения.
Все, что жестко кодирует путь, libc.so
должно быть обновлено для правильной работы начиная с Ubuntu 11.04 и далее. Если скрипт, о котором вы говорите, является частью Ubuntu, пожалуйста, сообщите об ошибке и добавьте multiarch
тег.
/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
:
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
Чтобы узнать, какая библиотека загружена программой, используйте ldd
как в ldd /bin/bash
:
linux-vdso.so.1 => (0x00007ffff1dff000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00007f9d8b3b8000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d8b1b4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d8ae1f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9d8b61c000)
Размещение символической ссылки ничего не сломает.
Чтобы получить список каталогов, в которых выполняется поиск, выполните:
ldconfig -v -N | grep '^/'
-v
вызывает отображение списка файлов и каталогов, -N
предотвращает /etc/ld.so.cache
повторное создание cache ( ).
/usr/local/lib
, но они работают нормально, если я создаю символическую ссылку /usr/lib
. Что вызывает это поведение?
ldconfig -v -N | grep '^/'
?
Просто добавьте символическую ссылку в файл libc.so.6 следующим образом:
sudo ln -s /lib/i386-linux-gnu/libc.so.6 /lib/libc.so.6
То же самое касается других отсутствующих файлов, которые все еще находятся в системе, в моем случае Matlab пропустил файл, проблема исчезла.