【问题标题】:Linux: How to modify shared library name in Dynamic Section of an ELF binaryLinux:如何在 ELF 二进制文件的动态部分中修改共享库名称
【发布时间】:2010-07-29 15:57:24
【问题描述】:

我有一个与 soname 共享的库:libfoo.so

如何将我的二进制文件链接到 libfoo.so,以便二进制文件的 ELF 部分中的共享库名称为:libfoo5.so?

我尝试创建一个符号链接:libfoo5.so -> libfoo.so,然后像这样链接我的库:

g++ ... -o mybinary *.o -Lpath -lfoo5

但是,当我在我的 ELF 二进制文件中打印出动态部分时,它显示:

readelf -d mybinary

我仍然得到:

Shared library: [libfoo.so]

【问题讨论】:

  • 虽然可能是平台相关的。我正在尝试使用 ARM 交叉编译器。我看到链接器不遵循符号链接。 readelf -d 给了我 libfoo5.so 作为依赖项,而不是 libfoo.so

标签: c linux


【解决方案1】:

您通常在构建共享库时这样做。有一个名为“soname”的链接器选项可以设置它。

我不知道您是否可以在构建后对其进行编辑,但如果可能的话,它可能包含在名为“elfutils”的包中。该软件包包含几个旨在操作 ELF 目标文件的程序。

【讨论】:

    【解决方案2】:

    文件libfoo5.so 可能是一个符号链接 到实际libfoo.so 或类似的东西。 ldd 对您的二进制文件有何看法?

    【讨论】:

    • libfoo5.so 是 libfoo.so 的符号链接 ldd 报告 mybinary 依赖于 libfoo.so
    • 我认为编译时链接器不遵循符号链接并将二进制文件与 libfoo5 相关联
    • 递归......来自readelf -d libfoo5.soSONAME是什么?
    猜你喜欢
    • 2011-03-13
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2017-01-25
    • 2014-05-02
    相关资源
    最近更新 更多