use*_*786 11 linux linker binaryfiles shared-libraries libcurl
我的程序依赖于libcurl.so.3,但在RHEL6中,没有像这样的软件libcurl.so.3 ? libcurl.so.4(当我创建此链接时,我的程序可以顺利运行).但是有这样一个软链接:libcurl.so ? libcurl.so.4.
我想修改SONAME的libcurl.so.3.0.0.0直接libcurl.so.3到libcurl.so.然后我可以在RHEL 6上运行我的程序,而无需自己创建软链接.
也许我的解决方案很愚蠢,但我认为学习如何直接修改二进制文件是一件有趣的事情.
$ readelf -d libcurl.so.3.0.0
偏移量0x303cc处的动态段包含25个条目:
标签类型名称/值
0x00000001(NEEDED)共享库:[libssl.so.2]
0x0000000e(SONAME)库soname:[ libcurl.so.3 ] --->我想将此更改为libcurl.so
Tim*_*mmm 10
patchelf --set-soname libnewname.so.3.4.5 path/to/libmylibrary.so.1.2.3
Run Code Online (Sandbox Code Playgroud)
您应该避免删除 SO 对象的版本,例如当您的应用程序依赖于特定的 libc (libc.so.6) 时。
如果您想使用另一个库,正确的方法是在调用应用程序之前使用 LD_PRELOAD 变量
如果将 LD_PRELOAD 设置为新文件的路径,则该文件将在任何其他库(甚至包括 C 运行时 libc.so)之前加载。
| 归档时间: |
|
| 查看次数: |
4903 次 |
| 最近记录: |