Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1748515
  • 博文数量: 143
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1462
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-23 11:14
文章分类

全部博文(143)

文章存档

2022年(3)

2021年(13)

2020年(21)

2019年(8)

2018年(28)

2017年(7)

2016年(63)

我的朋友

分类: LINUX

2016-10-25 19:10:37

  在了解它们之间的区别前,要知道我再上一篇中提到的:在Linux下,动态加载器(/lib/ld-linux.so.2)是如何寻找程序所依赖的共享库(.so)的。

命令/程序

说明

用途

注意

ld

GNU Binutils提供的链接器。用于将多个可重定向目标文件、共享库文件链接成一个可执行文件或共享库文件。

#ld -dynamic-linker /lib/ld-linux.so.2 helloworld.o -o helloworld /usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o /usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crti.o /usr/lib/gcc/i686-linux-gnu/4.6/crtbegin.o -lc /usr/lib/gcc/i686-linux-gnu/4.6/crtend.o /usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crtn.o:链接helloworld.ohelloworld

#gcc会调用ld做链接。

ld.so

动态加载器(/lib/ld-linux.so.2,很多人也称之为动态链接器。被自动执行,用于寻找可执行文件所需要的共享库,并加载。

 

#ld.so不能直接在命令行下执行,在执行程序时会自动执行。
#
查询ld.so路径:
objdump -s main | grep interp readelf -l main | grep interpreter ldd main

ldd

shell命令。用于查看目标文件所依赖的共享库。

#ldd main:打印出main所依赖的共享库,包括动态加载器(/lib/ld-linux.so.2)路径。

#ldd属于shell命令,而非一个可执行程序。

ldconfig

是一个共享库管理程序,位于/sbin目录下。用于使共享库为系统所共享。

#主要是在默认搜寻目录(/lib/usr/lib)以及共享库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的共享库(格式如lib*.so),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的共享库名字列表。ldconfig通常在系统启动时运行,而当用户安装了一个新的共享库时,就需要手工运行这个命令。

 

#ldconfig -p | less:打印出系统当前缓存文件中所保存的所有共享库。

 

 

 

 

 

  注:在Linux中,动态链接库的文件格式跟共享库是一样的。

阅读(3286) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~