【发布时间】:2019-08-06 18:42:15
【问题描述】:
角色阵容
-
big-old-app链接到旧版本的glibc,例如glibc-2.12。我无法改变这一点。 -
cute-new-addon.o链接到较新的版本glibc-2.23。此glibc-2.23位于非标准路径中(因为我没有 sudo 权限)。
故事
我想在big-old-app 中使用cute-new-addon.o。我通常会为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,我认为我无法在调用cute-new-addon.o 之前指定较新的mylibc.so.6。 big-old-app 和 cute-new-addon.o 紧密交织在一起,我无法知道它们中的任何一个何时需要对应的 glibc。
是的,cute-new-addon.o rpath 指向 /path/to/mylibs,我可以通过 ldd 确认它需要的所有库,它在 /path/to/mylibs 中查找。
我可以使用LD_PRELOAD 加载glibc 的两个不同版本吗?让big-old-app和cute-new-addon.o随心所欲地寻找他们需要的东西?
【问题讨论】:
-
stackoverflow.com/a/851229/50617 解释了为什么
LD_PRELOAD不起作用,以及可能的解决方法。
标签: c ld glibc ld-preload