【发布时间】:2017-04-17 08:45:04
【问题描述】:
我正在尝试在 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
EDIT2 和总结:
为了使 Employed Russian 的答案更详细,我将在此处粘贴我的最终解决方案。
我的目标是在我没有 root 权限的服务器上使用 Python 中的 tensorflow。我在导入 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 路径。
其他:
- 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,我还没有找到足够好的解决方案。
【问题讨论】:
-
您是否尝试设置
LD_LIBRARY_PATH变量仅用于运行python?即运行单个命令:LD_LIBRARY_PATH=/home/MYNAME/dependency/glibc-2.16/lib python,然后在出现的提示符下输入import tensorflow as tf? -
@mrry 我试过了,但它仍然发出同样的警告:
python: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument -
@KahoChan 使用 find (find / -name 'libgcc_s.so.1') 我的权限被拒绝,我怎样才能找到找到路径的位置?谢谢
标签: linux linker tensorflow glibc