可以使用LD_PRELOAD加载不同版本的glibc吗?

问题描述 投票:3回答:1

施放角色

  • big-old-app与旧版glibc相关联,glibc-2.12说。我无法改变这一点。
  • cute-new-addon.o与更新版本glibc-2.23相关联。这个glibc-2.23是一个非标准的道路(因为我没有sudo权力)。

故事

我想在cute-new-addon.o中使用big-old-app。我通常会为big-old-app写一个脚本来执行,然后调用cute-new-addon.o来执行它的技巧。从命令行,它看起来像:

$ big-old-app script.txt

但是,当我这样做时,big-old-app会抱怨cute-new-addon.o找不到glibc-2.23。这是可以理解的,因为我没有指定任何标准路径。如果我做了怎么办:

$ LD_LIBRARY_PATH=/path/to/mylibs:$LD_LIBRARY_PATH big-old-app script.txt

它是段错的! :(

我想这是因为big-old-app引用了更新的mylibc.so.6。这样做时,实现不再是big-old-app习惯的,所以它是段错误。

这个问题

关于script.txt,我认为我无法在调用mylibc.so.6之前指定更新的cute-new-addon.obig-old-appcute-new-addon.o紧密交织在一起,我无法知道他们中的任何一个何时需要相应的glibc

是的,cute-new-addon.o rpath指向/path/to/mylibs,我可以通过ldd确认它需要的所有库,它在/path/to/mylibs中寻找。

我可以使用LD_PRELOAD加载两个不同版本的glibc吗?让big-old-appcute-new-addon.o随心所欲地寻找他们需要的东西?

c ld glibc ld-preload
1个回答
2
投票

无法使用LD_PRELOAD,因为glibc动态链接器(有时称为ld.so或程序解释器;磁盘上的位置是特定于平台的)仅与来自相同glibc构建的libc.so.6(以及其余库)兼容。

您可以使用其他glibc的显式加载器调用以及库路径设置,这些设置会导致加载程序从单独的目录加载glibc对象,而不是系统目录。 glibc wiki有一个例子如何做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.