8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

单个主机上有多个 glibc 库

Jiren 2月前

221 0

我的 Linux(SLES-8)服务器目前有 glibc-2.2.5-235,但我有一个程序无法在此版本上运行,需要 glibc-2.3.3。是否可以在同一个服务器上安装多个 glibc?...

我的 linux(SLES-8)服务器目前有 glibc-2.2.5-235,但我有一个程序无法在此版本上运行,需要 glibc-2.3.3。

是否可以在同一台主机上安装多个 glibc?

这是我在旧 glibc 上运行程序时遇到的错误:

./myapp: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./myapp)
./myapp: /lib/i686/libpthread.so.0: version `GLIBC_2.3.2' not found (required by ./myapp)
./myapp: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./libxerces-c.so.27)
./myapp: /lib/ld-linux.so.2: version `GLIBC_2.3' not found (required by ./libstdc++.so.6)
./myapp: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./libstdc++.so.6)

因此我创建了一个名为 newglibc 的新目录并将以下文件复制到其中:

libpthread.so.0
libm.so.6
libc.so.6
ld-2.3.3.so
ld-linux.so.2 -> ld-2.3.3.so

export LD_LIBRARY_PATH=newglibc:$LD_LIBRARY_PATH

但是我收到一个错误:

./myapp: /lib/ld-linux.so.2: version `GLIBC_PRIVATE' not found (required by ./newglibc/libpthread.so.0)
./myapp: /lib/ld-linux.so.2: version `GLIBC_2.3' not found (required by libstdc++.so.6)
./myapp: /lib/ld-linux.so.2: version `GLIBC_PRIVATE' not found (required by ./newglibc/libm.so.6)
./myapp: /lib/ld-linux.so.2: version `GLIBC_2.3' not found (required by ./newglibc/libc.so.6)
./myapp: /lib/ld-linux.so.2: version `GLIBC_PRIVATE' not found (required by ./newglibc/libc.so.6)

因此看起来他们仍然链接到我放置 /lib 他们的地方,而不是从我放置他们的地方继续。

帖子版权声明 1、本帖标题:单个主机上有多个 glibc 库
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Jiren在本站《ubuntu》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 在同一个系统上很有可能存在多个版本的 glibc(我们每天都这样做)。

    但是,您需要知道 glibc 由许多部分组成(200 多个共享库),所有部分都必须匹配。其中一个部分是 ld-linux.so.2,它 必须与 libc.so.6 匹配,否则您将看到所看到的错误。

    ld-linux.so.2 的绝对路径在链接时被硬编码到可执行文件中,并且在链接完成后不能轻易更改(更新:可以使用 patchelf ;请参阅 答案 )。

    要构建可与新 glibc 一起使用的可执行文件,请执行以下操作:

    g++ main.o -o myapp ... \
       -Wl,--rpath=/path/to/newglibc \
       -Wl,--dynamic-linker=/path/to/newglibc/ld-linux.so.2
    

    链接 -rpath 器选项将使运行时加载器搜索库 /path/to/newglibc (因此您不必 LD_LIBRARY_PATH 在运行它之前进行设置),并且该 -dynamic-linker 选项将“烘焙”路径以更正 ld-linux.so.2 到应用程序中。

    如果您无法重新链接 myapp 应用程序(例如,因为它是第三方二进制文件),则不会丢失所有内容,但会变得更加棘手。一种解决方案是 chroot 为其设置适当的环境。另一种可能性是使用 rtldi 二进制编辑器 .

    更新: 或者您可以在现有二进制文件上使用 patchelf 将它们重定向到备用 libc。

返回
作者最近主题: