我试图在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程序将显示以下内容:
ImportError: /lib64/libc.so.6: version `GLIBC_2.16' not found
如何在Windows下使用PyQt(和sip)编译(和链接)python模块
链接到Boost正则expression式库时程序启动时崩溃
在makefile中设置共享库的path进行编译
多余的图书馆联系
-fprofile-arcs链接器选项是什么意思?
我安装了一个新版本的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
遵循在线说明,我通过以下方式更改了环境variables:
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 (我不知道在哪里可以find和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通过导出variables来清空。 但我仍然不能使用新版本的glibc。 任何人都可以帮助我如何正确链接新的glibc? 任何build议,将不胜感激!
编辑:所以进展如下:
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&总结:
为了使就业俄罗斯的答案更详细,我会在这里贴上我的最终解决scheme。
我的目标是在没有root权限的服务器上使用Python中的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
将命令拆分为以下几部分(我将使用???来表示不同人的path):
LD_LIBRARY_PATH=
这部分处理依赖关系
:意味着分裂
???/glibc-2.17/lib/
/lib64/和/usr/local/gcc-5.3.0/lib64/ :我通过find / -name 'libgcc_s.so.1'find了这些文件夹,因为我是
/???/glibc-2.17/lib/ld-2.17.so
/???/python可执行文件的path。 对于Python, import sys; print(sys.executable) import sys; print(sys.executable)来查看你的Pythonpath。
其他事情:
glibc-2.17从gnu下载。 我select了2.17,因为tensorflow需要2.17和2.17正常工作。
这个解决scheme还有另一个问题。 我有时需要在Python中调用shell命令,如os.system('ls')或os.system('python xxx.py') 。 但是,如果以正常的方式使用它,它会警告我: sh: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument ,我还没find足够好的解决scheme。
在Windows上使用GSL(编译,链接等)。 逐步指南
:我是否需要在项目的makefile中添加库中使用的所有库,在我的项目中使用?
为什么GNU链接程序找不到与-l <库>共享的对象?
export LD_LIBRARY_PATH=/home/MYNAME/dependency/glibc-2.16/lib
这个答案解释了为什么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 。