Apakah normal jika variabel LD_LIBRARY_PATH hilang dari lingkungan?

15

Saya telah menemukan secara kebetulan bahwa pada Debian Jessie saya tidak ada LD_LIBRARY_PATHvariabel (tepatnya printenv | grep LDmenunjukkan tidak ada yang terkait dengan linker dan echo "$LD_LIBRARY_PATH"menunjukkan juga tidak ada).

Ini adalah kasus di emulator terminal x ( yang mungkin menghapusnya karena setgid ) serta di terminal dasar ( Ctrl+Alt+F1).

Saya tahu itu LD_LIBRARY_PATH mungkin dianggap buruk sehingga Debian dapat memblokirnya, tetapi di sisi lain ada beberapa file /etc/ld.so.conf.d/yang berisi beberapa direktori untuk ditambahkan LD_LIBRARY_PATH. Tak satu pun dari file rc saya (yang saya tahu) mengacaukan LD_LIBRARY_PATHkeduanya.

Mengapa saya tidak melihat LD_LIBRARY_PATHvariabel?

calavera.info
sumber

Jawaban:

22

Ya, itu normal bahwa Anda tidak memiliki yang eksplisit LD_LIBRARY_PATH. Baca juga ldconfig (8) dan ld-linux (8) dan tentang rpath . Perhatikan bahwa ldconfigpembaruan /etc/ld.so.cache, bukan LD_LIBRARY_PATH. Kadang-kadang Anda akan mengatur rPath yang dapat dieksekusi secara eksplisit dengan -Wl,-rpath,direktori diteruskan ke gccpada link waktu.

Jika Anda membutuhkan LD_LIBRARY_PATH(tetapi Anda mungkin seharusnya tidak), atur sendiri (misalnya dalam ~/.bashrc).

Jika Anda membutuhkan sistem pengaturan lebar, Anda bisa misalnya mempertimbangkan menambahkan /usr/local/lib/di /etc/ld.so.confdan menjalankan ldconfigsetelah instalasi dari setiap perpustakaan di sana.

AFAIK $LD_LIBRARY_PATHhanya digunakan oleh penghubung dinamis ld-linux.so(dan oleh dlopen (3) yang menggunakannya) setelah mengeksekusi (2) . Lihat juga ldd (1) .

Baca Cara Menulis Perpustakaan Bersama Drepper untuk lebih lanjut.

Basile Starynkevitch
sumber
Itu kesalahan saya, saya pikir LD_LIBRARY_PATH adalah produk dari menjalankan ldconfig. Sementara itu adalah input ldconfig bersama dengan file di /etc/ld.so.conf.
calavera.info
1
Perasaan saya adalah yang ldconfigtidak menggunakan $LD_LIBRARY_PATH(yang hanya digunakan pada ld-linux.sowaktu)
Basile Starynkevitch
3
@ calavera.info bukan keduanya. Linker dinamis digunakan LD_LIBRARY_PATH bersama dengan output pada ldconfigsaat runtime. ldconfigtidak menggunakan atau mengubah LD_LIBRARY_PATH.
hobbs
Sekarang saya dapat melihat bahwa saya telah benar-benar kacau, mungkin dengan menghabiskan terlalu banyak waktu di Jawa, di mana "classpath" adalah virtualy satu-satunya konfigurasi penghubung dinamis. Segalanya tampak jelas sekarang, terima kasih banyak.
calavera.info