Ada alat yang lebih universal daripada chrpath
disebut patchelf
. Awalnya dibuat untuk digunakan dalam pembuatan paket untuk Nix dan NixOS (sistem pengemasan dan distribusi GNU/Linux).
Jika tidak ada rpath dalam biner (di sini disebut rdsamp), chrpath
gagal:
chrpath -r '$ORIGIN/../lib64' rdsamp
rdsamp: no rpath or runpath tag found.
Di sisi lain,
patchelf --set-rpath '$ORIGIN/../lib64' rdsamp
berhasil dengan baik.
Ada alat bernama chrpath
yang dapat melakukan ini - mungkin tersedia dalam paket distribusi Anda.
Seperti yang dikatakan @user7610, cara yang benar adalah patchelf
alat.
Namun, saya merasa dapat memberikan jawaban yang lebih komprehensif, mencakup semua perintah yang diperlukan untuk melakukan hal itu.
Untuk artikel lengkap tentang subjek ini, klik di sini
Pertama-tama, banyak pengembang berbicara tentang RPATH
, tetapi sebenarnya artinya RUNPATH
. Ini adalah dua bagian dinamis opsional yang berbeda, dan loader menanganinya dengan sangat berbeda. Anda dapat membaca selengkapnya tentang perbedaan keduanya di tautan yang saya sebutkan sebelumnya.
Untuk saat ini, ingat saja:
- Jika
RUNPATH
disetel,RPATH
diabaikan RPATH
sudah usang dan harus dihindariRUNPATH
lebih disukai karena dapat ditimpa olehLD_LIBRARY_PATH
Lihat R[UN]PATH saat ini
readelf -d <path-to-elf> | egrep "RPATH|RUNPATH"
Hapus R[UN]PATH
patchelf --remove-rpath <path-to-elf>
Catatan:
- Hapus kedua
RPATH
danRUNPATH
Tambahkan nilai ke R[UN]PATH
patchelf [--force-rpath] --set-rpath "<desired-rpath>" <path-to-elf>
Catatan:
<desired-path>
adalah daftar direktori yang dipisahkan titik dua, misalnya:/my/libs:/my/other/libs
- Jika Anda menentukan
--force-rpath
, tetapkanRPATH
, jika tidak tetapkanRUNPATH