mengungkapkan bahwa itu ada di dalam /lib/i386-linux-gnu/libc.so.6, tetapi sebuah skrip yang saya jalankan diharapkan akan langsung berada di bawah /lib, jadi mengapa tidak ada setidaknya symlink?
Apakah saya berisiko melanggar apa pun jika saya menaruh symlink di sana?
libc.sodipindahkan sebagai bagian dari pekerjaan multiarch di Ubuntu 11.04. Alasan mengapa tidak ada symlink di sana adalah bahwa tujuan dari multiarch adalah untuk memungkinkan untuk menginstal kedua versi i386dan pada saat yang sama sehingga Anda dapat menjalankan binari 32-bit lebih mudah pada sistem 64-bit dan sebaliknya (dan situasi serupa lainnya). Jika paket berisi symlink ke lokasi baru, maka versi paket untuk arsitektur yang berbeda tidak akan keduanya dapat diinstal pada saat yang sama (versi symlink mana yang akan memilih?), Mengalahkan seluruh titik latihan.amd64libclibc6dpkg
Apa pun yang menyandikan jalur untuk libc.soharus diperbarui agar berfungsi dengan baik dari Ubuntu 11.04 dan seterusnya. Jika skrip yang Anda bicarakan adalah bagian dari Ubuntu, tolong laporkan bug di dalamnya dan tambahkan multiarchtag.
Jawaban yang bagus, pelajari sesuatu yang baru hari ini (lagi) :)
Lekensteyn
1
Prosesor yang saya gunakan bahkan tidak mendukung instruksi 64 bit. Apakah Anda mengatakan ada risiko yang terkait dengan menambahkan symlink secara manual? Tidak yakin saya perlu melakukan itu, tetapi jika. Bagaimanapun, ini sepertinya jawaban yang benar. Terima kasih.
Erik B
@Erik B: apa? Apakah Anda memberi tahu saya bahwa Anda mencoba menggunakan aplikasi 64 pada prosesor 32 bit? Itu pasti tidak akan berhasil. Aplikasi 32 bit berfungsi dengan baik pada prosesor 64 bit, tetapi tidak sebaliknya.
Lekensteyn
@ Lindensteyn bukan itu yang saya katakan. Apa yang saya katakan adalah bahwa saya tidak menggunakan perpustakaan 64 bit. Jadi pada sistem khusus saya tidak akan ada kebingungan tentang apakah /lib/libc.so.6perpustakaan 32 atau 64 bit.
Erik B
3
Jika Anda tidak akan menggunakan paket 64-bit, saya ragu ada risiko signifikan dalam menambahkan symlink, tidak.
Colin Watson
10
Pustaka dinamis dimuat oleh kernel, path tidak di-hardcode dalam program. Sebuah program hanya mengatakan "Saya perlu libc.so.6". Sistem kemudian mencari di jalur perpustakaan seperti yang didefinisikan dalam /etc/ld.so.conf, termasuk /usr/libdan /libsecara default. File ini termasuk file konfigurasi tambahan di /etc/ld.so.conf.d.
Pada sistem 64 bit saya, libc.so.6dapat ditemukan di /lib/x86_64-linux-gnu/libc.so.6karena jalur yang didefinisikan dalam /etc/ld.so.conf.d/x86_64-linux-gnu.conf:
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
Untuk mengetahui perpustakaan apa yang dimuat oleh suatu program, gunakan lddseperti pada ldd /bin/bash:
Menempatkan symlink tidak akan merusak apa pun, tetapi juga tidak akan melakukan hal yang baik, bukan?
Erik B
@Erik B: program / skrip apa yang Anda maksud? Saya bisa mengerti bahwa skrip menjadi bingung karena jalurnya adalah hardcoded. Tetapi suatu program tidak harus tahu jalannya.
Lekensteyn
Apakah itu cara kerjanya? Saya terkadang memiliki masalah ketika program tidak dapat menemukan pustaka yang diinstal /usr/local/lib, tetapi mereka berfungsi dengan baik jika saya membuat symlink /usr/lib. Apa yang menyebabkan perilaku ini?
@Lekensteyn: Tentu: pastebin.com/dtfnw2Tv . Itu terjadi dengan beberapa program di hampir semua sistem yang saya gunakan, jadi saya berasumsi itu tidak terkait dengan konfigurasi sistem.
crazy2be
5
Cukup tambahkan symlink ke file libc.so.6 sebagai berikut:
/lib/libc.so.6
perpustakaan 32 atau 64 bit.Pustaka dinamis dimuat oleh kernel, path tidak di-hardcode dalam program. Sebuah program hanya mengatakan "Saya perlu libc.so.6". Sistem kemudian mencari di jalur perpustakaan seperti yang didefinisikan dalam
/etc/ld.so.conf
, termasuk/usr/lib
dan/lib
secara default. File ini termasuk file konfigurasi tambahan di/etc/ld.so.conf.d
.Pada sistem 64 bit saya,
libc.so.6
dapat ditemukan di/lib/x86_64-linux-gnu/libc.so.6
karena jalur yang didefinisikan dalam/etc/ld.so.conf.d/x86_64-linux-gnu.conf
:Untuk mengetahui perpustakaan apa yang dimuat oleh suatu program, gunakan
ldd
seperti padaldd /bin/bash
:Menempatkan symlink tidak akan merusak apa pun.
Untuk mendapatkan daftar direktori yang dicari, jalankan:
-v
menyebabkan daftar file + direktori ditampilkan,-N
mencegah cache (/etc/ld.so.cache
) diciptakan kembali.sumber
/usr/local/lib
, tetapi mereka berfungsi dengan baik jika saya membuat symlink/usr/lib
. Apa yang menyebabkan perilaku ini?ldconfig -v -N | grep '^/'
?Cukup tambahkan symlink ke file libc.so.6 sebagai berikut:
Hal yang sama berlaku untuk file hilang lainnya yang masih ada di sistem, dalam kasus saya Matlab hilang file, masalahnya hilang sekarang.
sumber