ldd ln指令 nm指令 - 学习记录 2020/2/25

研二


ldd

ldd用于显示可执行文件的依赖库,网上资料显示,Linux在执行程序的之前会调用ld-linux.so这个库来将可执行文件需要加载的动态库加载到内存中,此时该库获得了该可执行文件的控制权。网上资料大都说这个ld-linux.so存放在/lib/路径下,但我找了一圈没找到,倒是在调用ldd指令的时候发现了这个库:

[seth@ocean Server(nolog)]$ ldd -v libgmp.so 
ldd: 警告: 你没有执行权限  `./libgmp.so'
	linux-vdso.so.1 =>  (0x00007ffdd6df5000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f1638119000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f163875d000)

	Version information:
	./libgmp.so:
		libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
		libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
		libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
		libc.so.6 (GLIBC_2.7) => /lib64/libc.so.6
		libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
		libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
	/lib64/libc.so.6:
		ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
		ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2

/lib64/ld-linux-x86-64.so.2这个库倒是真实存在的,怀疑在linux不断开发升级的时候,这个库代替了ld-linux.so.2的功能。

ln指令

linux上的ln指令可用于为文件创建链接,链接分为硬链接和软链接,这两个的区别并没有很搞懂,但个至少都包含链接的功能。

ln -s libabc.so abclink

这样,只要还在本地电脑上,就可以达到只保存一个文件但可以在多个路径下使用该文件的目的。但需要注意若是要把文件分享给别人则需要将源文件拷走。

nm指令

列出ELF文件中有哪些导出函数。
为了在编译的时候隐藏一些函数, 可以在编译选项中加入**-fvisibility=hidden选项(是在编译的过程中加,不是在链接的过程中),该选项可让函数默认隐藏
同时在需要被导出的函数的声明处添加
attribute((visibility(“default”)))**选项,这样会将相应函数的导出属性设为可以导出。该选项的优先级高于-fvisibility=hidden,故添加__attribute__((visibility(“default”)))选项的函数可以导出。jni_md.h头文件中就有这一应用,在编写JNI时,在函数前田间JNIEXPORT宏,就可以让相应JNI函数导出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值