Laufendes Projekt mit einer .so-Datei, die von einer neueren Version von GLIBC abhängt, als ich auf meinem System installiert habe

364
Lee

Ich versuche, die in diesem Repository gespeicherte Software auszuführen: https://github.com/uwnlp/EasySRL .

Ich bin ein Benutzer auf einer Cluster-Maschine und habe daher keinen Root-Zugriff.

Ich kompiliere das obige Projekt mit ant und versuche dann auf meinem System zu laufen und erhalte die folgende Meldung:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /tmp/deeptaggerlibdeeptagger.so: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /tmp/deeptaggerlibdeeptagger.so) at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1937) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1822) at java.lang.Runtime.load0(Runtime.java:809) at java.lang.System.load(System.java:1086) at edu.uw.deeptagger.DeepTagger.loadLib(DeepTagger.java:57) at edu.uw.deeptagger.DeepTagger.loadFromJar(DeepTagger.java:35) at edu.uw.deeptagger.DeepTagger.<clinit>(DeepTagger.java:25) at edu.uw.easysrl.syntax.tagger.TaggerLSTM.makeDeepTagger(Unknown Source) at edu.uw.easysrl.syntax.tagger.TaggerLSTM.<init>(Unknown Source) at edu.uw.easysrl.syntax.tagger.Tagger.make(Unknown Source) at edu.uw.easysrl.syntax.parser.ParserBuilder.build(Unknown Source) at edu.uw.easysrl.main.EasySRL.makePipelineParser(Unknown Source) at edu.uw.easysrl.main.EasySRL.main(Unknown Source) 

Ich denke, das liegt daran, dass /tmp/deeptaggerlibdeeptagger.so gegen eine neuere Version von GLIBC kompiliert wurde, als wir in unserem Cluster installiert haben.

-bash-4.1$ strings /lib/libc.so.6 | grep GLIBC_2.1  GLIBC_2.1 GLIBC_2.1.1 GLIBC_2.1.2 GLIBC_2.1.3 GLIBC_2.10 GLIBC_2.11 GLIBC_2.12 

Ich habe folgendes versucht:

  1. Installieren Sie lokal eine neue Version von GLIBC, indem Sie folgende Schritte ausführen:

     mkdir ~/glibc_install; cd ~/glibc_install  wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz  tar zxvf glibc-2.14.tar.gz  cd glibc-2.14  mkdir build  cd build  ../configure --prefix=/home/opt/glibc-2.14  make -j4  make install 

und dann LD_LIBRARY_PATH = / home / opt / glibc-2.14 / lib exportieren. Wenn ich das Programm jetzt starte, passiert nichts.

  1. Ich habe auch versucht Patchelf zu verwenden

    ./patchelf --set-interpreter /path/to/newglibc/ld-linux.so.2 --set-rpath /path/to/newglibc/ /tmp/deeptaggerlibdeeptagger.so 

Welche gibt den folgenden Fehler: Abschnitt .interp kann nicht gefunden werden

Ich dachte, dass das Wiederherstellen der .so-Datei auf dem Cluster mit der nativen Version von glibc die beste Option wäre, aber ich glaube nicht, dass ich auf die Quelldateien zugreifen kann.

Ich weiß, dass es einige ähnliche Fragen wie SE SE usw. gibt. Ich habe so viele der vorgeschlagenen Lösungen wie möglich ausprobiert (viele von ihnen scheinen mittlerweile viele Jahre alt zu sein).

Jeder Rat wäre sehr dankbar.

1
Hat versucht, ein [AppImage] (https://appimage.org/) zu erstellen? xenoid vor 6 Jahren 0
Ich habe nicht, ich werde das untersuchen. Vielen Dank Lee vor 6 Jahren 0

0 Antworten auf die Frage