gpt4 book ai didi

c - 强制链接与库不同的 SONAME

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:01 26 4
gpt4 key购买 nike

如何以一种方式链接二进制文件以与两个现有版本的库兼容,这两个版本具有冲突的 SONAME ?这两个版本不共享相同的 SONAME 前缀。一个是 libcapi10.so.3,另一个是 libcapi10.so.4。我无法重新编译它们,因为我将它们作为二进制文件获取,并且由于这些是经过认证的加密库,我无法使用正确的 SONAME 请求新的。当然,如果一个是 libcap10.so.3 而另一个是 libcap10.so.3.1,我不会遇到任何问题,因为我只需要链接第一个以与第二个兼容。这两个库被告知是二进制兼容的(我应该相信这个信息)。我进行了搜索,但没有找到任何好的方法,无论是使用链接器选项还是使用 objcopy。我想避免手动修补二进制文件以在编译链接时使用它。

回到我最初的问题:如何指定 SONAME(在本例中为 libcap10.so)用于链接?

(我已经搜索过了,我目前的发现只是不行,但不幸的是这是一个要求......)。

更新:我使用类似 sed 的二进制工具对 .so 库进行了修补,将 libcapi10.so.6\0 替换为 libcapi10.so\0,这是有效的,因为新名称比以前的名称短,而且 SONAME 的 elf 结构是以 C 字符串结尾的0 并且在 gcc 链接期间不使用 elf 校验和。我只在编译时使用了那个补丁库,然后我可以在我的目标系统上使用相同二进制文件的一个或另一个原始库。

最佳答案

patchelf 是你的 friend 。您可以执行以下操作:patchelf --replace-needed libcapi10.so.3 libcapi10.so.4 <your_thing> .

Patchelf 对于其他各种事情也很有用,例如更改 RPATH。查看联机帮助页。非常漂亮的玩具。

关于c - 强制链接与库不同的 SONAME,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14611140/

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