修改程序加载动态库搜寻路径的三种可行方法_第1页
修改程序加载动态库搜寻路径的三种可行方法_第2页
修改程序加载动态库搜寻路径的三种可行方法_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1, 影响整个系统里所有程序的修改以ubuntu为例,在/etc/ld.so.conf.d 目录下新增一个配置文件,名词任意,比如为mylib.conf :lenky Ubuntu/etc/ld .so.conf.d $ sudo vi mylib.confsudo password for lenky:lenky Ubuntu/etc/ld .so.conf.d $ cat mylib.conf/home/lenky/lib/usr/lib/otherapp/lib指定了动态库的加载路径为/home/le nky/lib执行 ldconfig 进行更新 /etc/ld.so.cache :l

2、enky Ubuntu/etc/ld .so.conf.d $ sudo ldconfig也就是说/etc/ld.so.cache里保存了系统在执行应用程序加载动态库的默认搜索路径。动态库的搜索 是有先后顺序的,先找到谁就使用谁。2, 影响特定环境下所有程序的修改这利用的是LD_LIBRARY_PATH环境变量,在程序执行而加载动态库时,首先搜索的是LD_LIBRARY_PATH指定的路径,然后再是/etc/ld.so.cache 包含的系统默认搜索路径。因此,如果主动指定某环境下的LD_LIBRARY_PATH环境变量,那么就能够影响该环境下的所有应用程序执行时加载动态库的搜索路径。3, 影

3、响单个程序的修改如果我只想指定某一个程序myexe的动态库搜索路径,比如我要把某个程序分发给用户,但又不知道用户电脑上是否安装了对应的依赖库或依赖库版本是否一致等,那么我干脆就提供这份库,并让我的 程序myexe在执行时链接到我所提供的这份库,但又不能影响到用户电脑上的其他程序。那么根据第2点的变通办法有:a,创建一个脚本 wrapper,在这个脚本里 export LD_LIBRARY_PATH 或 setenv LD_LIBRARY_PATH环境变量,然后执行程序。b,创建一个程序 wrapper,在这个程序 export LD_LIBRARY_PATH环境变量,然后 exec执行程序。总

4、之,也就是为执行这个程序myexe而创建一个单独的环境,并在这个环境里设置好LD_LIBRARY_PATH 。可以实现既定目的,但会比较麻烦,一种更简单的方法是利用rpath 参数。有一段引用:-rpath=dirAdd a directory to the run time library search path. This is usedwhe n linking an ELF executable with shared objects. All -rpathargume nts are con cate nated and passed to the run time lin ker,

5、 whichuses them to locate shared objects at run time.-L searchdir-ibrary-path=searchdirAdd path searchdir to the list of paths that ld will search forarchive libraries and ld control scripts.简而言之,-L指定程序编译时的库搜索路径,而-rpath指定程序执行时的库搜索路径。指定单个程序执行时的库搜索路径,利用-rpath即可,比如:-Wl,-rpath,/path/to/foo -L/path/to/fo

6、o -lbaz注意其中的-WI,这表示它后面的参数是要传递给linker程序ld的。通过这几个参数会让程序时,在程序里写上对应的elf动态段属性RPATH :gcc 的-ld会在连接lenky Ubuntu/test $ cat t.c#include <stdio.h> int main() printf( "a");lenky Ubuntu/test $ gcc -o t -Wl,-rpath,/usr/lib ,-rpath, /home/lenky/lib,-rpath,/optt.clenky Ubuntu/test $ readelf -a t |

7、grep RPATHOxOOOOOOOf (RPATH)Libraryrpath: /usr/lib:/home/lenky/lib:/opt如果在编译时,库也在这几个特定路径,那么需要用-L来指定,以免编译时提示出错。程序myexe执行时,就可以搜索 RPATH内指定的路径了。 ns/8482152/whats-the-differe nce-betwee n-rpath-a nd-l ns/6562403/i-do nt-u ndersta nd-wl-rpath-wl http:/e n. /wiki/Rpath转载请保留地址:http:/le nky.i nf

8、o/2013/10/16/%e4%bf%ae%e6%94%b9%e7%a8%8b%e5%ba%8f%e5%8a%a0%e 8%bd%bd%e5%8a%a8%e6%80%81%e5%ba%93%e6%90%9c%e5%af%bb%e8%b7%af%e5%b e%84%e7%9a%84%e4%b8%89%e7%a7%8d%e5%8f%af%e8%a1%8c%e6%96%b9%e6%b3%95 / 或 /?p=2354备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并 欢迎来 信 讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了 一下归纳&转述,在此也一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论