我的程序依赖于libcurl.so.3
,但在RHEL6中没有像这样的软件libcurl.so.3 ->libcurl.so.4
(当我创建这个链接时,我的程序可以顺利运行)。但是有一个像这样的软链接:libcurl.so->libcurl.so.4
。有没有什么办法直接改变二进制的SONAME?
我想修改SONAME
的libcurl.so.3.0.0.0
直接从libcurl.so.3
到libcurl.so
。然后,我可以在RHEL 6上运行我的程序,而无需自己创建软链接。
也许我的解决方案很愚蠢,但我想学习如何直接修改二进制文件是一件有趣的事情。
Tahnk你的评论,devnull。也许我没有说清楚。
$ readelf -d libcurl.so.3.0.0
在偏移0x303cc动态段包含25个条目:
代码类型名称/值
00000001(需要)共用资料库:[的libssl .so.2]
0x0000000e(SONAME)库的soname:libcurl.so.3] --->我想此更改为libcurl.so
你说什么是* *重命名文件或符号连接,这不是*修改*二进制。 – devnull
您可以创建一个“libcurl.so.4”的副本,将其重命名为“libcurl.so.3”,并使用十六进制编辑器将SONAME条目从“libcurl.so.4”重命名为“libcurl.so.3 ”。这通常不起作用,因为版本信息也存在于动态库中。 –
我认为最简单的方法就是重建libcurl并编译一下构建规则以获得所需的SONAME。对于发布后的更改,我不会建议二进制版本。有一个关于修补ELF格式的项目http://nixos.org/patchelf.html,它不允许更改SONAME,但它可以提供关于如何实现这样的事情的一些想法。 – joetde