使用较新版本的glibc时出错

Kah*_*han 8 linux linker glibc tensorflow

我试图在linux服务器上安装tensorflow,我只是一个没有root权限的用户.当我通过跳转服务器ssh到它时,我无法传输文件.系统如下:

Linux THENAME_OF_SURVER 2.6.32-573.18.1.el6.x86_64 #1 SMP Tue Feb 9 22:46:17 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

我安装了tensorflow pip install tensorflow,一个tensorflow程序将显示以下内容:

ImportError: /lib64/libc.so.6: version `GLIBC_2.16' not found

我安装了新版本的glibc

git clone git://sourceware.org/git/glibc.git cd glibc git checkout --track -b local_glibc-2.16 origin/release/2.16/master mkdir build cd build ../configure --prefix=/home/MYNAME/dependency/glibc-2.16 make -j4 make install

按照在线说明,我通过以下方式更改了环境变量:

export LD_LIBRARY_PATH=/home/MYNAME/dependency/glibc-2.16/lib

但这导致我遇到一个问题:我不能使用任何命令.例如,我打电话给ls它会像这样警告我:

ls: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

然后我按照另一条指令运行命令,如下所示:

/home/MYNAME/dependency/glibc-2.16/lib/ld-linux-x86-64.so.2 --library-path /home/MYNAME/dependency/glibc-2.16/lib:$LD_LIBRARY_PATH:/path/to/gcc-5.2.0/lib64:/usr/lib64/:/usr/lib64/ ls (我不知道在哪里找到类似的文件夹gcc-5.2.0,我的which gcc节目/usr/local/sbin/gcc,但它链接到/usr/local/gcc-5.3.0/bin/gcc,没有lib64子文件夹)

但随后又出现了以下警告:

ls: error while loading shared libraries: ls: cannot open shared object file

我知道我可以ls通过将变量导出为空来再次使用.但我仍然无法使用新版本的glibc.任何人都可以帮助我如何正确链接新的glibc?任何建议,将不胜感激!

编辑:所以进展情况如下:

  1. LD_LIBRARY_PATH=/home/MYNAME/dependency/glibc-2.16/lib python
    会导致 python: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

  2. /home/MYNAME/dependency/glibc-2.16/lib/ld-2.16.so python
    会导致 python: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

编辑2和摘要:

为了使Employed Russian的答案更加详细,我会在此处粘贴我的最终解决方案.

我的目标是在我没有root权限的服务器上使用Python中的tensorflow.我被警告说,ImportError: /lib64/libc.so.6: version 'GLIBC_2.16' not found当导入tensorflow时.

根据Employed Russian的回答,我使用以下命令运行我的命令:

LD_LIBRARY_PATH=/home/USERNAME/dependency/glibc-2.17/lib/:/lib64/:/usr/local/gcc-5.3.0/lib64/ /home/USERNAME/dependency/glibc-2.17/lib/ld-2.17.so /home/USERNAME/anaconda2/bin/python

将命令拆分为以下部分(我将用于???表示不同人的不同路径.):

  1. LD_LIBRARY_PATH=
    • 这部分涉及依赖关系
    • : 意味着拆分
    • ???/glibc-2.17/lib/
    • /lib64/并且/usr/local/gcc-5.3.0/lib64/:我找到了这些文件夹,find / -name 'libgcc_s.so.1'因为我是
  2. /???/glibc-2.17/lib/ld-2.17.so
  3. /???/python您的可执行文件的路径.对于Python,import sys; print(sys.executable)要查看Python路径.

其他事情:

  1. glibc-2.17是从gnu下载.我之所以选择2.17,是因为张量流需要2.17和2.17才能正常工作.
  2. 这个解决方案还有另一个问题.我有时需要在Python中调用shell命令状os.system('ls')os.system('python xxx.py').但是如果我以正常的方式使用它,它会警告我:sh: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument我没有找到足够好的解决方案.

Emp*_*ian 5

export LD_LIBRARY_PATH=/home/MYNAME/dependency/glibc-2.16/lib

此答案说明了为什么LD_LIBRARY_PATH不起作用以及应该怎么做。

我阅读了您的帖子并尝试了...
python: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

该错误通常表示您和之间不匹配。他们必须匹配。ld-linuxlibc.so.6

如果您通过使用直接加载程序调用/home/MYNAME/.../ld-2.16.so,则还必须安排/home/MYNAME/.../libc.so.6进行加载。

您可以通过传递--library-path ...ld-2.16.so或进行LD_LIBRARY_PATH适当设置来做到这一点。

你用命令ld-2.16 --library-path ... ls几乎正确的。你缺少的事情是,ld-2.16不会搜索你PATH。您需要为其提供完整的路径名:ld-2.16 --library-path ... /bin/ls


Eva*_*ans 5

就我而言,它是centos 6和 python for pytorch

我遇到了诸如此类的错误:

libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

ImportError: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/evaldsu/.conda/envs/conda_env/lib/python3.6/site-
Run Code Online (Sandbox Code Playgroud)

我在本地目录 /opt/exp_soft/tools 中与 glibc-2.17 一起安装

然后我安装了 conda env 修补工具(也可以使用其他工具安装):

conda install -c conda-forge patchelf
Run Code Online (Sandbox Code Playgroud)

然后我修补了 python 的二进制文件以使用不同的 glibc 路径(您可以使用任何二进制文件执行此操作)。请注意,它会改变你的 python 二进制文件。

patchelf --set-rpath /opt/exp_soft/tools/glibc-2.17/lib:$HOME/.conda/envs/conda_inf/lib:/usr/lib64:/lib64:/lib --set-interpreter /opt/exp_soft/tools/glibc-2.17/lib/ld-linux-x86-64.so.2 /home/evaldsu/.conda/envs/conda_inf/bin/python3.6
Run Code Online (Sandbox Code Playgroud)

如果您具有完全管理员访问权限,另一种选择是安装此脚本:

https://gist.github.com/harv/f86690fcad94f655906ee9e37c85b174