Linux / ld 和 ld.so 命令的区别

一、说明

ld 链接器,它的生命周期是发生在 compile-time 的,它的一些参数是编译时期 gcc 给传递的。比如,指定需要链接什么库。

ld.so 的周期是发生在 run-time 的,名字叫动态链接器 / 加载器,它的作用体现在运行时。比如你链接了指定的库,它运行的时候会根据指定的路径去加载指定的库。

而命令 ld.so 相应的配置文件是 /etc/ld.so.conf,这是个文本文件,里面可以增加修改 so 库的搜索路径(与windows下是有区别的,windows下动态库是先搜索当前目录,再去环境变量 PATH 中搜索,再到系统路径下去搜索),当然也可以通过定义一个 $LD_LIBRARY_PATH 的环境变量来指定运行时的搜索路径。所以,这个配置文件是不可以被 ld 链接器使用的,也就是说 ld 的时候,需要加入 -L 这个搜索路径参数。

二、本来面目

1、ld

$ ls -ahl /usr/bin/ld
lrwxrwxrwx 1 root 0 19 6月   7  2021 /usr/bin/ld -> x86_64-linux-gnu-ld
$ ls -ahl /usr/bin/x86_64-linux-gnu-ld
lrwxrwxrwx 1 root 0 23 6月   7  2021 /usr/bin/x86_64-linux-gnu-ld -> x86_64-linux-gnu-ld.bfd
$ ls -ahl /usr/bin/x86_64-linux-gnu-ld.bfd
-rwxr-xr-x 1 root 0 1.7M 6月   7  2021 /usr/bin/x86_64-linux-gnu-ld.bfd
$ file /usr/bin/x86_64-linux-gnu-ld.bfd
/usr/bin/x86_64-linux-gnu-ld.bfd: ELF 64-bit LSB executable, x86-64, 
version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, 
for GNU/Linux 3.2.0, BuildID[sha1]=ec010f2c19950fed8f42d82eceb7e3fb127a5fea, stripped

2、ld.so

$ ls -ahl /lib64/ld-linux-x86-64.so.2 
lrwxrwxrwx 1 root 0 32 10月 21 16:25 /lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.28.so
$ file /lib/x86_64-linux-gnu/ld-2.28.so
/lib/x86_64-linux-gnu/ld-2.28.so: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=d20480dc32316e1607ad2a3d820689548860b5fd, stripped

发现:ld-2.28.so 是一个  pie executable,而不是 shared library 。

(SAW:Game Over!)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值