1

Я пытаюсь запустить программное обеспечение, хранящееся в этом хранилище: https://github.com/uwnlp/EasySRL.

Я являюсь пользователем на кластерной машине и поэтому не имею root-доступа.

Я компилирую вышеупомянутый проект с помощью ant, а затем пытаюсь запустить его в моей системе и получаю следующее сообщение:

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)

Я думаю, что это потому, что /tmp/deeptaggerlibdeeptagger.so был скомпилирован с более новой версией GLIBC, чем мы установили в нашем кластере.

-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

Я пробовал следующее:

  1. Установите новую версию GLIBC локально, выполнив следующие действия:

       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
    

а затем экспортируйте LD_LIBRARY_PATH =/home/opt/glibc-2.14/lib. Когда я запускаю программу сейчас, ничего не происходит.

  1. Я также пытался использовать patchelf

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

Который дает следующую ошибку: не может найти раздел .interp

Я подумал, что, возможно, лучшим вариантом будет перестройка файла .so в кластере с собственной версией glibc, но я не думаю, что у меня есть доступ к исходным файлам.

Я знаю, что есть довольно много вопросов подобного характера в SE SU и т.д. Я испробовал как можно больше предложенных решений (многим из них, похоже, уже много лет).

Любые советы будут высоко ценится.

0