Proyek GNU Binutils (berisi GNU linker (ld)) bukanlah sumber dari perubahan perilaku ini, melainkan Debian (2016)1, dan Gentoo (2013!)2.
Menurut komit gentoo dari Mike Frysinger pada Jan 2013 :
Opsi dtags "baru" telah ada selama 14+ tahun, jadi untuk target Linux dan GNU, aktifkan secara default."
Perubahan ini tidak diterima dengan baik 3, 4, 5, karena RUNPATH dan RPATH memiliki "perbedaan perilaku tidak terdokumentasi"...Anehnya, perubahan ini sekarang diterapkan pada kandang Debian.
Masalahnya adalah menggunakan RUNPATH, mengarah ke masalah yang tidak dapat diprediksi ... Tetapi terutama hanya berfungsi. Dari wikipedia :
ld dynamic linker tidak mencari lokasi DT_RUNPATH untukketergantungan transitif , tidak seperti DT_RPATH.
Apakah ada cara untuk memaksakan perilaku lama?
Ya. Anda dapat menggunakan opsi ini -Wl,--disable-new-dtags
untuk memberi tahu baru linker untuk menggunakan lama perilaku, yaitu RPATH.
Apakah mungkin memberi tahu linker versi lama untuk menghasilkan keluaran baru (mis. RUNPATH alih-alih RPATH)?
Ya. Gunakan -Wl,--enable-new-dtags
untuk memberi tahu lama linker untuk menggunakan baru perilaku, yaitu RUNPATH.
Saya memverifikasi yang dapat dieksekusi dengan readelf
dan kedua opsi ini sepertinya mengontrol apa yang akan ditulis di bagian Dinamis ELF. Saya pikir masalahnya disebabkan oleh perubahan default untuk versi baru, meskipun, yang menarik, halaman manual untuk ld
akan menyarankan bahwa itu harus tetap sama:
--aktifkan-tag-baru
--disable-new-dtags
Linker ini dapat membuat tag dinamis baru di ELF. Tapi sistem ELF yang lebih tua mungkin tidak memahaminya. Jika Anda menetapkan--aktifkan-tag-baru, tag dinamis baru akan dibuat sesuai kebutuhan dan tag dinamis lama akan dihilangkan. Jika Anda menetapkan --disable-new-dtags, tidak ada tag dinamis baru yang akan dibuat. Secara default, tag dinamis baru tidak dibuat. Perhatikan bahwa opsi tersebut hanya tersedia untuk sistem ELF.