dlopen linux 实例_在Linux中在libc和libdl中执行dlopen

本文探讨了在Linux系统中,dlopen函数的使用与libdl库的关系。当使用gcc编译涉及dlopen的程序时,需要添加-ldl选项。libdl虽然依赖于libc,但其在ldd输出中并不直接显示,因为它的功能主要为libc的内部私有dl函数提供便利。通过readelf工具查看libdl的符号表,可以看出所有函数均为PRIVATE,指向libc的实现。libdl与glibc紧密结合,为运行时加载和使用.so文件提供了便捷。
摘要由CSDN通过智能技术生成

如果

gcc编译的程序正在调用dlopen,则必须在启用-ldl选项的情况下编译它.这意味着这样的程序依赖于库libdl.so上的运行时.事实上,通过对它执行ldd,我们看到了这一行:

libdl.so.2 => /lib/x86_64-Linux-gnu/libdl.so.2

libc.so反过来使用dlopen(例如,处理libnss.so),但是没有出现在libldl.so上执行ldd:

/lib64/ld-Linux-x86-64.so.2 (0x00007f5a488e4000)

Linux-vdso.so.1 => (0x00007fff7bdfe000)

为何如此区别?

libdl只暴露了libc中已经存在的私有dl函数以及一些包装器,使得库的使用更容易一些.您可以通过查看libdl的符号表来查看此行为.

如果在libdl上使用readelf,则限制为PRIVATE符号:

readelf -s /usr/lib/x86_64-Linux-gnu/libdl.so | grep PRIVATE

13: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND [email protected]_PRIVATE (7)

14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND [email protected]_PRIVATE (8)

16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND [email protected]_PRIVATE (8)

18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND [email protected]_PRIVATE (8)

20: 0000000000000000 0 FUNC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值