Risposte:
libc.so
è stato spostato come parte del lavoro multiarch in Ubuntu 11.04. La ragione per cui non può esserci un collegamento simbolico è che lo scopo di multiarch è di rendere possibile installare contemporaneamente entrambe le versioni i386
e in modo da poter eseguire più facilmente i binari a 32 bit su sistemi a 64 bit e viceversa (e altre situazioni simili). Se il pacchetto contenesse un collegamento simbolico alla nuova posizione, le versioni di quel pacchetto per architetture diverse non sarebbero entrambe installabili contemporaneamente (quale versione del collegamento simbolico sceglierebbe?), Sconfiggendo l'intero punto dell'esercizio.amd64
libc
libc6
dpkg
Tutto ciò che codifica il percorso libc.so
deve essere aggiornato per funzionare correttamente da Ubuntu 11.04 in poi. Se lo script di cui stai parlando fa parte di Ubuntu, segnala un bug e aggiungi il multiarch
tag.
/lib/libc.so.6
si tratti della libreria a 32 o 64 bit.
Le librerie dinamiche vengono caricate dal kernel, i percorsi non sono codificati in un programma. Un programma dice semplicemente "Ho bisogno di libc.so.6". Il sistema cerca quindi nei percorsi delle librerie come definito in /etc/ld.so.conf
, incluso /usr/lib
e /lib
per impostazione predefinita. Questo file include file di configurazione aggiuntivi in /etc/ld.so.conf.d
.
Sul mio sistema a 64 bit, libc.so.6
può essere trovato a /lib/x86_64-linux-gnu/libc.so.6
causa del percorso definito in /etc/ld.so.conf.d/x86_64-linux-gnu.conf
:
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
Per scoprire quale libreria è caricata da un programma, utilizzare ldd
come in 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)
Mettere il link simbolico non romperà nulla.
Per ottenere un elenco di directory ricercate, eseguire:
ldconfig -v -N | grep '^/'
-v
provoca la visualizzazione di un elenco di file + directory, -N
impedisce la /etc/ld.so.cache
ricreazione della cache ( ).
/usr/local/lib
, ma funzionano bene se creo un collegamento simbolico da /usr/lib
. Cosa causa questo comportamento?
ldconfig -v -N | grep '^/'
?
Aggiungi semplicemente il link simbolico al file libc.so.6 come segue:
sudo ln -s /lib/i386-linux-gnu/libc.so.6 /lib/libc.so.6
Lo stesso vale per altri file mancanti ancora nel sistema, nel mio caso a Matlab mancava il file, il problema è sparito ora.