我正在尝试在 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
我安装了新版本的 glibcgit 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 路径。 其他事情:
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/