首页 > 解决方案 > 在 Linux 中使用 LD_PRELOAD 覆盖共享库

问题描述

我正在尝试修复似乎动态链接到旧版本 GSL(GNU 科学库)的二进制文件:

$ ldd my-binary
        ...
        libgsl.so.23 => /usr/lib/x86_64-linux-gnu/libgsl.so.23 (0x00007fc600d51000)
        ...

如果我用LD_PRELOAD设置一个较新的版本,我的理解是旧版本会被替换。相反,我只是看到同一个库的两个实例:

$ LD_PRELOAD=/path/to/my/libgsl.so.25.0.0 ldd my-binary
        ...
        /path/to/my/libgsl.so.25.0.0 (0xsomething)
        ...
        libgsl.so.23 => /usr/lib/x86_64-linux-gnu/libgsl.so.23 (0x00007fc600d51000)
        ...

那会起作用吗,还是将它们都放在那里会引起问题?

标签: linuxdynamic-linkinggslld-preload

解决方案


推荐阅读