Cluster komputasi kami menjalankan versi CentOS yang sangat lama, dengan Kernel lama (2.6.18) dan, tentu saja, lib dan binari yang lama. Karena memperbarui semuanya memerlukan banyak pekerjaan pada semua node, ini bukan pilihan.
Saya mencoba mengkompilasi dan menggunakan program yang membutuhkan C++11
dan karenanya versi gcc
(dan / atau clang
) yang lebih baru. Karena saya tidak ingin dipusingkan dengan sistem sama sekali, saya ingin melakukan ini sebagai pengguna non-root di beberapa pohon direktori lokal.
Masalahnya adalah, yang gcc
membutuhkan yang lebih baru glibc
dari yang ada pada mesin. Oleh karena itu, saya perlu mempertahankan versi terpisah yang lebih baru glibc
di lib/
pohon lokal saya , mungkin seperti yang dijelaskan di sini .
Di mana saya tersesat, bagaimana cara "menyandikan" jalur lib lokal saya ke semua binari yang diperlukan, yaitu gcc
,, g++
dll.? Mengatur LD_LIBRARY_PATH ke lib/
pohon lokal saya menyebabkan semua biner sistem tidak berfungsi lagi ( ELF file OS ABI invalid
) karena mereka ingin menggunakan yang baru libm.so
/ libc.so
yang tidak dikompilasi.
Jadi, untuk menyelesaikannya: Apa cara yang tepat untuk mempertahankan tumpukan pengembangan lokal yang lebih baru (berisi glibc
, gcc
dll.) Secara paralel dengan sistem lama tanpa dipusingkan sebagai root?
Sebagai pertanyaan sampingan: Mengatur LD_LIBRARY_PATH diposkan sebagai solusi di seluruh SE saat akan terpisah glibc
. Bagi saya, itu menyebabkan kesalahan di atas ketika saya mencoba menjalankan sistem biner (seperti ls
). Bagaimana bisa? Apakah saya melakukan sesuatu yang salah atau apakah ini perilaku yang dimaksudkan?
sumber
-rpath
(-Wl,rpath
) ke linker, linker juga akan menambahkan path dariLD_RUN_PATH
variabel environment ke path pencarian