Відповіді:
libc.so
було переміщено як частина багатоархівської роботи в Ubuntu 11.04. Причиною того, що не може бути симпосилання, є те, що мета мультиарха - це можливість встановити одночасно 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
відтворити кеш ( ).
/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 відсутній файл, проблема вже відсутня.