/Lib/libc.so.6 neden eksik?


20
find | grep libc.so.6

içeride olduğunu ortaya koyuyor /lib/i386-linux-gnu/libc.so.6, ancak yayınladığım bir komut dosyasının doğrudan altında olması bekleniyor /lib, öyleyse neden en azından bir sembolik bağlantı yok?

Oraya bir sembolik bağlantı koyarsam bir şeyleri riske atar mıyım?

Yanıtlar:


22

libc.so11.04'te Ubuntu'daki multiarch çalışmasının bir parçası olarak taşındı . Bir sembolik olamaz nedeni multiarch amacı mümkün hem yüklemeye yapmak olduğunu orada i386ve amd64sürümlerini libc64-bit sistemlerde daha kolay 32-bit ikilileri çalıştırmak böylece aynı anda ve bunun tersi (ve diğer benzer durumlar). Eğer libc6paket yeni bir konuma sembolik içeriyordu, daha sonra farklı mimarileri için bu paketin hallerinin aynı zamanda (sembolik bağın versiyonu olacağını hangi yüklenebilir olmaz dpkgegzersiz tüm noktasını yenerek almak?).

Yolu kodlayan her şey, libc.soUbuntu 11.04'ten itibaren düzgün çalışacak şekilde güncellenmelidir. Bahsettiğiniz komut Ubuntu'nun bir parçasıysa, lütfen üzerinde bir hata bildirin ve multiarchetiketi ekleyin .


1
Güzel cevap, bugün yeni bir şey öğrendim (tekrar) :)
Lekensteyn

1
Kullandığım işlemci 64 bit talimatları bile desteklemiyor. Manuel olarak sembolik bağlantı ekleme ile ilgili herhangi bir risk var mıdır? Bunu yapmam gerektiğinden emin değilim ama eğer. Neyse, bu doğru cevap gibi görünüyor. Teşekkürler.
Erik B,

@Erik B: ne? Bana 32 bit işlemcide 64 uygulama kullanmaya çalıştığınızı mı söylüyorsunuz? Bu kesinlikle var değil işe gidiyor. 32 bit uygulamalar 64 bit işlemcide iyi çalışıyor, ancak tersi mümkün değil.
Lekensteyn

@Lekensteyn kesinlikle söylediğim bu değil. Demek istediğim, 64 bit kitaplığı kullanamadığım. Yani, belirli sistemimde /lib/libc.so.632 veya 64 bit kitaplığın olup olmadığı hakkında herhangi bir karışıklık olmayacak .
Erik B,

3
Eğer 64-bit paketleri kullanmayacaksanız, bir sembolik bağlantı eklemede önemli bir risk olduğundan şüpheliyim, hayır.
Colin Watson,

10

Dinamik kütüphaneler çekirdek tarafından yüklenir, yollar bir programda kodlanmış değildir. Bir program sadece "libc.so.6'ya ihtiyacım var" diyor. Sistem daha sonra ve varsayılan olarak /etc/ld.so.confdahil olmak üzere kütüphane yollarında arama yapar . Bu dosya içinde ek yapılandırma dosyaları içerir ./usr/lib/lib/etc/ld.so.conf.d

64 bit sistemimde, libc.so.6içinde /lib/x86_64-linux-gnu/libc.so.6tanımlanan yol nedeniyle bulunabilir /etc/ld.so.conf.d/x86_64-linux-gnu.conf:

# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

Kütüphane, bir program tarafından yüklenen öğrenmek için, kullanmak lddgibi 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)

Sembolik bağlantıyı koymak hiçbir şeyi bozmaz.

Aranan dizinlerin bir listesini görmek için aşağıdaki komutu çalıştırın:

ldconfig -v -N | grep '^/'

-vdosya + dizinlerinin gösterilmesini sağlar, -Nönbellek ( /etc/ld.so.cache) 'nin yeniden oluşturulmasını önler .


Sembolik bağlantıyı koymak hiçbir şeyi bozmaz, ama gerçekten de iyi bir şey yapmaz, değil mi?
Erik B,

@Erik B: hangi programa / senaryoya bakıyorsunuz? Bir kodun karıştığını anlayabiliyorum, çünkü yol kodlanmış. Ancak bir program yolu bilmek zorunda değildir.
Lekensteyn

Böyle mi çalışıyor? Bazen programların yüklü bulunan kütüphaneleri bulamadığı sorunlarla karşılaşıyorum /usr/local/lib, ancak bir bağlantı kurarsam iyi çalışıyor /usr/lib. Bu davranışa ne sebep olur?
crazy2be

@ crazy2be: çıktısını gönderebilir misiniz ldconfig -v -N | grep '^/'?
Lekensteyn

@Lekensteyn: Tabii: pastebin.com/dtfnw2Tv . Neredeyse kullandığım herhangi bir sistemdeki bazı programlarda oldu, ancak sistem yapılandırmasıyla ilgili olmadığını varsaydım.
crazy2be,

5

Sadece libc.so.6 dosyasına aşağıdaki gibi link ekleyin:

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

Aynı hala sistemde diğer eksik dosyalar için de geçerli, benim durumumda Matlab dosya eksikti, sorun şimdi gitti.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.