Ответы:
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 пропустил файл, проблема исчезла.