当前位置: 首页 > 面试题库 >

使用较新版本的glibc时出错

易瀚漠
2023-03-14
问题内容

我正在尝试在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

我通过安装了tensorflow pip install tensorflow,一个tensorflow程序将显示以下内容:

ImportError: /lib64/libc.so.6: versionGLIBC_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 gccshows
类似的文件夹/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权限的服务器上使用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是因为tensorflow需要2.17,而2.17可以正常工作。
  2. 该解决方案还有另一个问题。有时我需要像os.system('ls')或那样在Python中调用shell命令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

此答案说明了为什么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



 类似资料:
  • 如何让composer使用我安装的较新版本的php?我已经下载并在所有本地服务器上使用了PHP5.4,但当我下载composer时,它指向我的mac电脑的默认设置#/usr/local/bin/env版本,即5.3.15。我试图编辑composer可执行文件并更改使用的php,但它破坏了可执行文件。 我试图使用作曲家来安装Laravel,因为它下载了错误的版本。 这就是我的composer可执行文

  • 这可能是一个愚蠢的问题,但我会遇到任何问题运行Java程序和相关的库编译Java版本1.6和1.7(我编译使用1.7而一些库编译使用1.6)和运行整个程序在1.7的JRE里?

  • 问题内容: Cloundfoundry最近将其Java buildpack更新到2.5版(包括Java 8和tomcat 8)。我仍想使用2.4版,因为我的应用尚未升级到Java 8。这样做最简单的方法是什么? 我可以使用 但是如何指定使用版本2.4(https://github.com/cloudfoundry/java- buildpack/releases/tag/v2.4 )?显然,指定标

  • 问题内容: 我正在处理的代码可以在Windows XP和Mac OS X上完美运行。在CentOS(以及Fedora和Ubuntu)上进行测试时,它无法正常工作。搜索网使我得出结论,那就是引起问题的那一版本。因此,现在我需要Zend Lucene 的版本才能正常工作。 我已经下载libiconv的,并配置它,,然后没有任何错误。似乎已成功安装,因为执行说版本是。虽然简单仍然给出了版本。 然后,我使

  • 我已经为Raspberry PI使用了已经编译好的openCV版本。任何感兴趣的人的链接 //usr/local/lib/libopencv_calib3d.so.2.4:未定义对`CV::Mutex::Unlock()'的引用 //usr/local/lib/libopencv_calib3d.so.2.4:未定义对`CV::mutex::lock()‘的引用 //usr/local/lib/l

  • 问题内容: 当我在Ubuntu Lucid 10.04 PC上编译东西时,它会与glibc链接。Lucid使用glibc 2.11。当我在具有旧版glibc的另一台PC上运行此二进制文件时,该命令失败,提示没有glibc 2.11 … 据我所知,glibc使用符号版本控制。我可以强制gcc链接到特定的符号版本吗? 在我的具体用法中,我尝试为ARM编译gcc跨工具链。 问题答案: 您是正确的,因为g