正在运行的项目有一个 .so 文件,它依赖于比我系统上安装的 GLIBC 版本更新的版本

正在运行的项目有一个 .so 文件,它依赖于比我系统上安装的 GLIBC 版本更新的版本

我正在尝试运行存储在此存储库中的软件: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

我尝试了以下方法:

  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 --set-interpreter /path/to/newglibc/ld-linux.so.2 --set-rpath /path/to/newglibc/ /tmp/deeptaggerlibdeeptagger.so
    

这会出现以下错误:找不到 .interp 部分

我认为使用 glibc 的本机版本在集群上重建 .so 文件可能是最好的选择,但我认为我无法访问源文件。

我知道在 SE SU 等网站上有不少类似性质的问题。我已尝试了尽可能多的所提出的解决方案(其中很多似乎已经是很多年前的问题了)。

如有任何建议我将非常感激。

相关内容