linux - 有什么办法可以直接修改二进制文件的SONAME吗?

标签 linux linker shared-libraries libcurl binaryfiles

我的程序依赖于 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 文件中嵌入的 SONAMElibcurl.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/

相关文章:

unix - UNIX 共享库可以合并为一个库吗?

linux - freeTDS bash : Executing sql queries in Microsoft SQL server

linux - 从 makefile 运行可执行文件

python - 如何使用 Python 按大小搜索文件

c - 在c中链接文件(...的多个定义)

linux - Linux 中的持久库搜索路径

python - 在 ubuntu 中嵌入 python 时出现段错误

c++ - 找不到 SDL.h 时

c++ - 如何解决-------在mingw上对 `__chkstk_ms'的 undefined reference -------

c - 流程的完整状态