博客
关于我
patchelf 的功能以及使用 patchelf 修改 rpath 以解决动态库问题
阅读量:493 次
发布时间:2019-03-07

本文共 770 字,大约阅读时间需要 2 分钟。

patchelf 修改 rpath 以使用自动以目录中的动态库

背景

最近,有个同事需要解决一个动态库路径的问题。他的任务是让编译好的 httpd 程序使用自定义目录中的动态库,而不是系统默认的路径。经过尝试,使用 LD_LIBRARY_PATH 未生效,因此我们需要深入分析并找到合适的解决方案。

问题分析

查找自己编译生成的 httpd峰ypeshi(ELF格式文件)后,发现其确实包含了 rpath 属性,且指向系统默认路径。这导致 LD_LIBRARY_PATH 设置得不到应用,进一步验证了问题的根源在于编译配置中 rpath 的设定。

测试与解决方案

在我们深入分析后,我们有以下几个关键步骤:

  • 测试现有配置:首先,确保 httpd 的编译配置是否正确设置了 rpath。检查 Makefile 文件中的相关编译选项。

  • 修改 rpath 属性:我们使用 patchelf 工具修改 httpd 的 rpath 属性,使其指向自定义路径。

    patchelf --set-rpath '/home/xx/local/apr/apr/lib/:/home/xx/local/apr/util/lib/' httpd

    这样,运行的 httpd 会优先检查自定义的动态库目录,从而解决问题。

  • 验证修改:重新运行 httpd,检查它是否适用自定义的动态库路径。如果修改成功,问题应该可以解决。

  • 其他解决方法

    除了修改 rpath,还可以通过 LD_LIBRARY_PATH 环境变量来实现同样的效果。然而,由于 rpath 已被弃用,修改 rpath 是一种更加直接和可靠的解决方法。

    总结

    解决这种问题主要依赖于对 ELF 格式文件和动态库链接机制的理解。掌握 patchelf 和类似工具的使用非常关键,可以轻松解决许多看似复杂的问题。

    转载地址:http://umdjz.baihongyu.com/

    你可能感兴趣的文章
    python-day3 for语句完整使用
    查看>>
    Failed to get D-Bus connection: Operation not permitted解决
    查看>>
    【wp】HWS计划2021硬件安全冬令营线上选拔赛
    查看>>
    mcrypt加密以及解密过程
    查看>>
    Python 之网络式编程
    查看>>
    网站故障公告1:使用阿里云RDS之后一个让人欲哭无泪的下午
    查看>>
    上周热点回顾(6.9-6.15)
    查看>>
    上周热点回顾(1.23-1.29)
    查看>>
    Python 简明教程 --- 20,Python 类中的属性与方法
    查看>>
    稀疏数组
    查看>>
    83. Remove Duplicates from Sorted List
    查看>>
    痞子衡嵌入式:串口调试工具pzh-com诞生记(2)- 界面构建(wxFormBuilder3.8.0)
    查看>>
    Nmap扫描工具介绍
    查看>>
    常用Windows 快捷键
    查看>>
    linux命令-压缩与打包
    查看>>
    Oracle Orion tool check io(ORACLE Orion 工具查看以及校验IO)
    查看>>
    oracle 11g not in 与not exists 那个高效?
    查看>>
    玩玩小爬虫——试搭小架构
    查看>>
    Javascript之旅——第九站:吐槽function
    查看>>
    Sql Server之旅——第十站 看看DML操作对索引的影响
    查看>>