我正在尝试运行存储在此存储库中的软件:https://github.com/uwlp/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
我尝试了以下方法:
通过执行以下操作在本地安装新版本的 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。现在当我运行该程序时,什么也没有发生。
我也尝试过使用补丁
./patchelf --set-interpreter /path/to/newglibc/ld-linux.so.2 --set-rpath /path/to/newglibc/ /tmp/deeptaggerlibdeeptagger.so
这会出现以下错误:找不到 .interp 部分
我认为使用 glibc 的本机版本在集群上重建 .so 文件可能是最好的选择,但我认为我无法访问源文件。
我知道在 SE SU 等网站上有不少类似性质的问题。我已尝试了尽可能多的所提出的解决方案(其中很多似乎已经是很多年前的问题了)。
如有任何建议我将非常感激。