gpt4 book ai didi

linux - 将 .so 静态链接到可执行文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:17 25 4
gpt4 key购买 nike

我有一些非常特殊的需求:是否可以将 .so 文件静态链接到构建的可执行文件,以便可执行文件不再动态链接此 .so

最佳答案

ELF共享对象应该以某种方式 dynamically linked实际上应该包含 position-independent code (强烈推荐,但理论上不是强制性的)。另见 this

有关所有详细信息,请阅读 Drepper 的论文 How To Write Shared Libraries (超过 100 页)。

另请阅读 Program Library HOWTOC++ dlopen minihowto .

也许您只是想让可执行文件能够在缺少共享库的情况下做一些明智的事情。然后你可以简单地在运行时使用 dlopen(3) 显式加载它(作为插件) ,很好地处理失败错误情况,并在成功时使用 dlsym(3) 从中获取适当的符号.另见 ld-linux.so(8) , elf(5) , execve(2) , mmap(2)

也许您想要一个完全静态的 ELF 可执行文件。然后你应该这样构建它(并且只使用静态库)。

也许您想从共享对象中提取文本、数据和重定位信息(使用 objdumpreadelf 或一些使用 的代码可能会很痛苦) code>libbfdlibelf) 并重建一些可链接的目标文件(可能使用 ld -r 或一些痛苦的 ld 脚本)。我不确定它是否在所有情况下都完全可行(例如,当 .so 本身具有动态依赖项时),这肯定是痛苦的。

附言。 请多激发您的问题并解释您真正要问的原因。我做了一些盲目的猜测。我想您可以访问源代码并且能够更改其中的一些内容。

关于linux - 将 .so 静态链接到可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37924168/

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