2016-12-02 272 views
4

我想在linux服务器上安装tensorflow,我只是一个没有root权限的用户。我无法通过跳转服务器将文件传输到/从它传输。该系统是如下:使用更新版本的glibc时出错

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?任何建议,将不胜感激!

编辑: 所以进度如下:

  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

EDIT2 &摘要:

为了使就业俄罗斯的回答更详细的,我会在这里贴上我的最终解决方案。

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

基于使用俄罗斯的答案,我用下面的运行我的命令:

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,我还没有找到足够好的解决方案。
+0

您是否尝试过仅为运行'python'设置'LD_LIBRARY_PATH'变量?即运行单个命令:'LD_LIBRARY_PATH =/home/MYNAME/dependency/glibc-2.16/lib python',然后在提示的提示符处输入'import tensorflow as tf'? – mrry

+0

@mrry我试过,但它仍然警告相同:'python:加载共享库时出错:__vdso_time:无效模式为​​dlopen():无效参数' –

回答

1

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

This answer解释了为什么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。你需要给它full pathname:ld-2.16 --library-path ... /bin/ls

+0

我读过你的文章并尝试过'/ home/MYNAME/dependency/glibc-2.16/lib/ld-2.16.so python',但是在加载共享库时会导致'python:error:__vdso_time:dlopen()的无效模式:无效参数。有什么遗漏吗? –

+0

@KahoChan我已经更新了答案。 –

+0

谢谢!我解决了你的指导下的问题。我编辑了我的问题,并最终粘贴了我的详细解决方案。此解决方案的唯一问题是我无法在Python脚本中使用shell命令。 –