In unserem Rechencluster wird eine sehr alte Version von CentOS ausgeführt, mit einem alten Kernel (2.6.18) und natürlich alten Bibliotheken und Binärdateien. Da das Aktualisieren des Ganzen viel Arbeit auf allen Knoten erfordert, ist dies keine Option.
Ich versuche, ein Programm zu kompilieren und zu verwenden, das C++11
neuere Versionen von gcc
(und / oder clang
) erfordert . Da ich überhaupt nicht mit dem System herumspielen möchte, möchte ich dies als Nicht-Root-Benutzer in einem lokalen Verzeichnisbaum tun.
Das Problem ist, dass gcc
eine neuere glibc
als die auf den Computern vorhandene erforderlich ist. Daher muss ich eine separate, neuere Version von glibc
in meinem lokalen lib/
Baum pflegen , wahrscheinlich wie hier beschrieben .
Wo ich bin , ist verloren, wie kann ich „hard“ die Wege meiner lokalen Libs in alle erforderlichen Binärdateien, dh gcc
, g++
usw.? Wenn Sie LD_LIBRARY_PATH auf meinen lokalen lib/
Baum setzen, funktionieren alle System-Binärdateien nicht mehr ( ELF file OS ABI invalid
), da sie mein neues libm.so
/ verwenden möchten, für libc.so
das sie nicht kompiliert wurden.
Also, um es zu einpacken: Was ist der richtige Weg , um eine neuere Entwicklung auf lokaler Ebene Stapel (mit zu halten glibc
, gcc
etc.) parallel zu einem alten System ohne als Root Herumspielen?
Als Nebenfrage: Das Festlegen von LD_LIBRARY_PATH wird als Lösung in ganz SE veröffentlicht, wenn es um die Trennung geht glibc
. Für mich verursacht es die oben genannten Fehler, wenn ich versuche, eine Systembinärdatei (wie ls
) auszuführen . Woher? Habe ich etwas falsch gemacht oder ist das das beabsichtigte Verhalten?
quelle
-rpath
(-Wl,rpath
) an den Linker fügt der Linker auch die Pfade von derLD_RUN_PATH
Umgebungsvariablen zum Suchpfad hinzu