Apakah boleh (atau tidak) melakukan symlink libraries untuk mengatasi kesalahan “tidak dapat membuka objek bersama”?

12

Kadang-kadang, karena satu dan lain alasan, suatu program belum menentukan atau menyertakan semua dependensinya dengan benar, dan memulainya menghasilkan kesalahan yang mengindikasikan dependensi yang hilang. Kesalahan umum adalah sesuatu seperti:

cannot open shared object libudev.so.0

Saya melihat banyak jawaban menasihati orang untuk mengatasi masalah seperti itu dengan membuat symlink di /usr/libatau lokasi sistem lainnya, dan ini sepertinya sering memecahkan masalah. Tetapi saya melihat jumlah komentar yang sama menasihati orang bahwa itu adalah ide yang buruk. Inilah satu jawaban yang representatif.

Dalam keadaan apa itu dapat diterima untuk menghubungkan perpustakaan untuk membuat program bekerja? Tidak pernah? Terkadang? Bagaimana jika Anda menghapus symlink setelah Anda selesai menjalankan program?

Apa konsekuensi dari melakukan ini?

John Feminella
sumber

Jawaban:

12

Masalah dengan membuat tautan ini adalah bahwa tautan tersebut tidak dikelola dengan cara apa pun yang berarti. Jika perpustakaan itu dihapus, tautannya menjadi rusak. Jika pustaka ditingkatkan, mungkin mengalami kesalahan karena tautan yang tidak diharapkan ada di sana.

Juga, Anda pada dasarnya berbohong kepada sistem. Dalam contoh yang ditautkan, Anda berpura-pura bahwa libudev.so.1itu sebenarnya libudev.so.0. Mereka diberi nama berbeda karena suatu alasan (versi berbeda dari perpustakaan). Meskipun ini mungkin bekerja dengan baik untuk beberapa program, ada potensi bahwa perbedaan antara versi dapat menyebabkan masalah (seperti segfault atau perilaku tak terduga lainnya).

Jadi, jika Anda secara khusus membuat tautan ini sehingga sebuah program akan berjalan, dan Anda tahu bahwa Anda akan menghapusnya nanti, Anda mengatasi masalah pertama tetapi bukan yang kedua. Meskipun ini memang menangani masalah utama, itu tidak ideal.

Solusi yang ideal tentu saja untuk menginstal versi perpustakaan yang tepat (jawaban yang diterima pada contoh Anda yang ditautkan), atau untuk mengkompilasi program terhadap versi yang Anda miliki.

Baru saja
sumber