gpt4 book ai didi

linux - 在构建依赖共享库的程序后如何更改共享库的文件名?

转载 作者:IT王子 更新时间:2023-10-29 00:18:29 35 4
gpt4 key购买 nike

我有一个程序依赖于它希望在目录结构深处找到的共享库。我想将该共享库移出并移到更好的地方。在 OS X 上,这可以使用 install_name_tool 来完成。我找不到 Linux 的等效项。

作为引用,readelf -d myprogram 吐出以下释义输出:

Dynamic section at offset 0x1e9ed4 contains 30 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [this/is/terrible/library.so]
0x00000001 (NEEDED) Shared library: [libGL.so.1]
0x00000001 (NEEDED) Shared library: [libGLU.so.1]
0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
(continues in an uninteresting fashion)

(根据要求,ldd myprogram:)

    linux-gate.so.1 =>  (0x0056a000)
this/is/terrible/library.so => not found
libGL.so.1 => /usr/lib/mesa/libGL.so.1 (0x0017d000)
libGLU.so.1 => /usr/lib/libGLU.so.1 (0x00a9c000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00710000)
(etc, etc)

我想将“this/is/terrible/library.so”勘误为“shared/library.so”。请注意,如果程序留在其“构建”位置,即相对路径 this/is/terrible/library.so 实际存在的位置,则 ldd 能够找到它,如您所料。

我知道 RPATH,它不是我要找的,我不需要全局更改搜索路径。

最佳答案

我们可以使用patchelf :

patchelf --replace-needed liboriginal.so.1 libreplacement.so.1 my-program

我们也可以移除一个依赖:

patchelf --remove-needed libfoo.so.1 my-program

添加依赖:

patchelf --add-needed libfoo.so.1 my-program

或者更改搜索库的路径(rpath):

patchelf --set-rpath /path/to/lib:/other/path my-program

关于linux - 在构建依赖共享库的程序后如何更改共享库的文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2759254/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com