Запуск проекта, в котором файл .so зависит от более новой версии GLIBC, чем я установил в моей системе

280
Lee

Я пытаюсь запустить программное обеспечение, хранящееся в этом хранилище: 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 и т. Д. Я испробовал как можно больше предложенных решений (многим из них, похоже, уже много лет).

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

1
Пытались создать [AppImage] (https://appimage.org/)? xenoid 6 лет назад 0
У меня нет, я буду смотреть на это. Спасибо Lee 6 лет назад 0

0 ответов на вопрос

Похожие вопросы