linux - 使用较新版本的 glibc 时出错

标签 linux linker tensorflow glibc

我正在尝试在 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
我通过 pip install tensorflow 安装了 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?任何建议,将不胜感激!

编辑:
所以进展如下:

  • 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
  • /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
    将命令拆分为以下部分(我将使用 ??? 表示不同人的不同路径。):
  • LD_LIBRARY_PATH=
  • 这部分处理依赖项
  • :表示拆分
  • ???/glibc-2.17/lib/
  • /lib64//usr/local/gcc-5.3.0/lib64/ : 我通过 find / -name 'libgcc_s.so.1' 找到了这些文件夹因为我是
  • /???/glibc-2.17/lib/ld-2.17.so
  • /???/python可执行文件的路径。对于 Python,import sys; print(sys.executable)查看您的 Python 路径。

  • 其他事情:
  • glibc-2.17 从 gnu 下载.我选择 2.17 是因为 tensorflow 需要 2.17 并且 2.17 工作正常。
  • 这个解决方案还有一个问题。我有时需要在 Python 中调用 shell 命令,例如 os.system('ls')os.system('python xxx.py') .但如果我以正常方式使用它,它会警告我如下:sh: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument我还没有找到足够好的解决方案。
  • 最佳答案

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



    This answer解释原因 LD_LIBRARY_PATH不起作用,而你应该做什么。

    I read your post and tried ...
    python: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument



    该错误通常意味着您在 ld-linux 之间存在不匹配。和 libc.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 .

    关于linux - 使用较新版本的 glibc 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40932215/

    相关文章:

    python - 使用 Python 拆分 ps 的输出

    切换到linux时python pygame程序无法正常工作

    c++ - CMake 不需要的依赖

    linux - 在 shell 中写入输出流

    linux - 我怎么知道哪些包是用 apt-get 命名的?

    c++ - 奇怪的链接器错误

    c - 使用 gcc,严格包含 C99 符号,明确排除 POSIX

    python - 拟合神经网络时出现 UnboundLocalError - TensorFlow 错误?

    machine-learning - 在 tensorflow 中实现 MLP

    tensorflow - Keras 中填充输出的 F1 分数