我的程序依赖于 libcurl.so.3
,但是在 RHEL6 中没有符号链接(symbolic link) libcurl.so.3 ⇾ libcurl.so.4
(我的程序可以创建此链接时运行顺利)。但是,有符号链接(symbolic link) libcurl.so ⇾ libcurl.so.4
。
我想将 libcurl.so.3.0.0.0
文件中嵌入的 SONAME
从 libcurl.so.3
修改为 libcurl.so
这样我就可以在 RHEL 6 上运行我的程序而无需创建符号链接(symbolic link)。
我的解决方案可能不是最优的,但我认为学习如何直接修改二进制文件很有值(value)。
$readelf -d libcurl.so.3.0.0
Dynamic segment at offset 0x303cc contains 25 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libssl.so.2]
0x0000000e (SONAME) Library soname: [libcurl.so.3]
我想将上面的 libcurl.so.3
更改为 libcurl.so
。
最佳答案
是的,您可以使用 patchelf像这样(来自其 Readme ):
patchelf --set-soname libnewname.so.3.4.5 path/to/libmylibrary.so.1.2.3
关于linux - 有什么办法可以直接修改二进制文件的SONAME吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18467163/