Perché manca /lib/libc.so.6?


20
find | grep libc.so.6

rivela che si trova /lib/i386-linux-gnu/libc.so.6, ma uno script che stavo eseguendo si aspettava che fosse direttamente sotto /lib, quindi perché non c'è almeno un link simbolico?

Rischierei di rompere qualcosa se inserissi un link simbolico lì?

Risposte:


22

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 i386e 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.amd64libclibc6dpkg

Tutto ciò che codifica il percorso libc.sodeve 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 multiarchtag.


1
Bella risposta,
ho

1
Il processore che sto usando non supporta nemmeno le istruzioni a 64 bit. Diresti che c'è qualche rischio associato con l'aggiunta manuale di un link simbolico? Non sono sicuro di doverlo fare, ma se. Comunque, questa sembra essere la risposta corretta. Grazie.
Erik B,

@Erik B: che cosa? Mi stai dicendo che stai cercando di utilizzare un'app 64 su un processore a 32 bit? Che è sicuramente non andare a lavorare. Le app a 32 bit funzionano perfettamente su un processore a 64 bit, ma non viceversa.
Lekensteyn,

@Lekensteyn non è assolutamente quello che sto dicendo. Quello che sto dicendo è che non ho alcuna utilità per la libreria a 64 bit. Quindi sul mio sistema particolare non ci sarà alcuna confusione sul fatto che /lib/libc.so.6si tratti della libreria a 32 o 64 bit.
Erik B,

3
Se non utilizzerai mai pacchetti a 64 bit, dubito che ci sia un rischio significativo nell'aggiunta di un collegamento simbolico, no.
Colin Watson,

10

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/libe /libper impostazione predefinita. Questo file include file di configurazione aggiuntivi in /etc/ld.so.conf.d.

Sul mio sistema a 64 bit, libc.so.6può essere trovato a /lib/x86_64-linux-gnu/libc.so.6causa 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 lddcome 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 '^/'

-vprovoca la visualizzazione di un elenco di file + directory, -Nimpedisce la /etc/ld.so.cachericreazione della cache ( ).


Mettere il link simbolico non spezzerebbe nulla, ma non farebbe davvero nulla di buono, giusto?
Erik B,

@Erik B: a quale programma / script ti riferisci? Posso capire che uno script viene confuso perché il percorso è hardcoded. Ma un programma non deve conoscere il percorso.
Lekensteyn,

Funziona così? Mi sembra di avere problemi a volte in cui i programmi non riescono a trovare le librerie installate /usr/local/lib, ma funzionano bene se creo un collegamento simbolico da /usr/lib. Cosa causa questo comportamento?
crazy2be

@ crazy2be: puoi pubblicare l'output di ldconfig -v -N | grep '^/'?
Lekensteyn,

@Lekensteyn: Sicuro: pastebin.com/dtfnw2Tv . È successo con alcuni programmi su quasi tutti i sistemi che ho usato, tuttavia, quindi ho pensato che non fosse correlato alla configurazione del sistema.
crazy2be

5

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.