
patchelf 的功能以及使用 patchelf 修改 rpath 以解决动态库问题
发布日期:2021-05-10 10:33:01
浏览次数:9
分类:精选文章
本文共 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 和类似工具的使用非常关键,可以轻松解决许多看似复杂的问题。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月19日 09时36分55秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Hadoop学习笔记—Yarn
2019-03-06
__format__
2019-03-06
JSONPath小试牛刀之Snack3
2019-03-06
Jenkins - 部署在Tomcat容器里的Jenkins,提示“反向代理设置有误”
2019-03-06
2017年前端框架、类库、工具大比拼
2019-03-06
wxWidgets源码分析(1) - App启动过程
2019-03-06
wxWidgets源码分析(3) - 消息映射表
2019-03-06
wxWidgets源码分析(5) - 窗口管理
2019-03-06
wxWidgets源码分析(6) - 窗口关闭过程
2019-03-06
wxWidgets源码分析(7) - 窗口尺寸
2019-03-06
wxWidgets源码分析(8) - MVC架构
2019-03-06
wxWidgets源码分析(9) - wxString
2019-03-06
Mybatis Generator最完整配置详解
2019-03-06
[白话解析] 深入浅出熵的概念 & 决策树之ID3算法
2019-03-06
[梁山好汉说IT] 梁山好汉和抢劫银行
2019-03-06
[源码解析] 消息队列 Kombu 之 基本架构
2019-03-06
[源码分析] 消息队列 Kombu 之 启动过程
2019-03-06
[源码分析] 消息队列 Kombu 之 Consumer
2019-03-06
[源码分析] 消息队列 Kombu 之 mailbox
2019-03-06
抉择之苦
2019-03-06