我正在尝试在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
安装了张量流,张量流程序会显示以下内容:
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
EDIT2&发明内容:
为了使雇用俄罗斯人的答案更加详细,我会在此处粘贴我的最终解决方案。
我的目标是在我没有root权限的服务器上使用Python中的tensorflow。导入张量流时,我被警告ImportError: /lib64/libc.so.6: version 'GLIBC_2.16' not found
。
根据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路径。其他事项:
os.system('ls')
或os.system('python xxx.py')
。但是如果我以正常的方式使用它,它会警告我:sh: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument
并且我还没有找到足够好的解决方案。答案 0 :(得分:5)
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-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
。
答案 1 :(得分:2)
在我的情况下,它是 pytorch 用python的 centos 6 。
我有类似的错误:
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-
我与glibc-2.17一起安装在本地目录/ opt / exp_soft / tools
然后我在conda env修补工具中安装了(也可以使用其他工具安装):
conda install -c conda-forge patchelf
然后我修补了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
如果您具有完全的管理员访问权限,另一种选择就是安装此脚本:
https://gist.github.com/harv/f86690fcad94f655906ee9e37c85b174