c - 如何从可执行文件中删除链接库

标签 c linker shared-libraries binutils

全部。

有人创建了一个可执行文件。

# ldd test_bin 
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x4082d000)
    libA.so.0 => /usr/lib/libA.so.0 (0x408fe000)
    libB.so.0 => /usr/lib/libB.so.0 (0x4093e000)
    libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x409ad000)
    libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0x409fe000)
    librt.so.1 => /lib/librt.so.1 (0x40a0a000)
    libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x40a19000)
    libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0x40b25000)
    libssl.so.0.9.8 => /usr/lib/libssl.so.0.9.8 (0x40b67000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40bb0000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x40bc3000)
    libc.so.6 => /lib/libc.so.6 (0x40be3000)
    libm.so.6 => /lib/libm.so.6 (0x40d11000)
    libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0x40d87000)
    /lib/ld-linux.so.3 (0x40000000)
    libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x40f4e000)
    libdl.so.2 => /lib/libdl.so.2 (0x40f59000)

在这种情况下,我想将 libB.so 合并到 libA.so 中。

所以我创建了 libA.so,它涵盖了 libB.so 提供的所有 API。

然后我必须重新链接到这个库。但我没有 test_bin 的任何来源。

如何在没有任何来源的情况下从可执行文件中删除 libB.so 链接?

是否可以?我只是看看binutils。但我还没有找到它。

请给我一个建议。

最佳答案

你可以走简单的路线,让 libB.so 和 libB.so.0 成为 libA.so.0 的符号链接(symbolic link)。不修改可执行文件,但它是一种快速且可移植的解决方案。

关于c - 如何从可执行文件中删除链接库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7566519/

相关文章:

c - 指针类型转换和取消引用

c - 如何测试 POSIX 兼容性?

html - 无法将文本从 html 文件发送到 c 文件

c++ - 多文件 C++ 项目中的 undefined reference 链接器错误

c++ - 在 Debug模式下找不到 msvcr90d.dll

c - 使用指针将 double 分解为字符?

c++ - LNK1004 : Cannot open file 'Jsfwbase12D.lib'

python-3.x - 使用 Python 3 从 Linux 上的内存加载库

c++ - 可选共享库

c++ - 共享库中的抽象类