Почему отсутствует файл /lib/libc.so.6?

find | grep libc.so.6

показывает, что это в /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 метка.

Динамические библиотеки загружаются ядром, пути к ним не жестко заданы в программе. Программа просто говорит: "Мне нужен 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) от воссоздания.

Просто добавьте символическую ссылку в файл libc.so.6 следующим образом:

sudo ln -s /lib/i386-linux-gnu/libc.so.6 /lib/libc.so.6

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