ganti jalur ke perpustakaan yang ada dengan jalur khusus
Jika ini perpustakaan Anda sendiri, Anda mungkin menautkannya seperti itu:
$ cc -o prog1 -l/full/path/to/libABC.so prog1.o
bukannya yang tepat:
$ cc -o prog1 -L/full/path/to/ -lABC prog1.o
Pendekatan pertama memberi tahu Linux linker bahwa aplikasi membutuhkan perpustakaan itu dengan tepat, hanya perpustakaan itu dan tidak boleh ada penggantian. Pendekatan kedua memberi tahu bahwa aplikasi memerlukan pustaka yang akan diinstal di suatu tempat di sistem, baik di jalur pustaka default atau yang ditunjukkan oleh $LD_LIBRARY_PATH (akan dicari selama waktu proses). -L hanya digunakan selama waktu tautan.
Jika tidak, alih-alih menambal ELF, periksa dulu apakah Anda dapat mengganti pustaka menggunakan symlink. Ini adalah trik yang biasa:sulit untuk memodifikasi executable sesudahnya, tetapi sangat mudah untuk mengubah tempat ke titik symlink.
patchelf
adalah yang Anda inginkan
$ patchelf --replace-needed LIB_ORIGIN LIB_NEW ELF_FILE
Untuk melihat efeknya
$ readelf -d ELF_FILE
Instal alatnya mudah:
$ sudo apt-get install patchelf readelf