Почему отсутствует /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 путь к libc.so должно быть обновлено для правильной работы с Ubuntu 11.04 и далее. Если скрипт, о котором вы говорите, является частью Ubuntu, сообщите об ошибке и добавьте тег multiarch .

Динамические библиотеки загружаются ядром, пути не жестко закодированы в программе. Программа просто говорит: «Мне нужно libc.so.6». Затем система ищет в пулах библиотек, как определено в /etc/ld.so.conf , включая /usr/lib и /lib по умолчанию. Этот файл содержит дополнительные файлы конфигурации в /etc/ld.so.conf.d .

В моей 64- /lib/x86_64-linux-gnu/libc.so.6 системе 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 отсутствовал в файле, проблема исчезла.