【C语言】so的编译和链接情况

  • -fPIC:表示编译为位置独立(地址无关)的代码,不用此选项的话,编译后的代码是位置相关的,所以动态载入时,是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。 

#### 环境变量 ####

# 查看程序静态链接库文件搜索路径
$ echo $LIBRARY_PATH
# 查看程序动态链接库文件搜索路径
$ echo $LD_LIBRARY_PATH  
# 添加动态连接库的搜索路径
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/you_so_path/



#### 查看so相关 ####

# 查看so库符号表,注意C/C++的函数名称是不同的
$ nm -D xxx.so

# 例如
$ nm -D ./lib/gcc/x86_64-linux-gnu/9/libquadmath.so
    0000000000003f80 T acoshq
    0000000000004620 T acosq
    0000000000005da0 T asinhq
    0000000000006700 T asinq
    0000000000006f50 T atan2q
    00000000000073e0 T atanhq
    00000000000077b0 T atanq
    000000000000dc70 T cabsq
    ...

# 查看可执行程序链接动态库的情况
$ ldd <可执行程序>

# 例如
$ ldd ./lib/gcc/x86_64-linux-gnu/9/libquadmath.so
	linux-vdso.so.1 (0x00007ffeb277d000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f66231e0000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6622fee000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f662338e000)



#### 查看详情 ####

# 查看可执行程序详情
$ file <可执行程序>
# 查看so库详情
$ file <you_so_file>

# 例如
$ file ffmpeg
    ffmpeg: ELF 64-bit LSB shared object, x86-64, 
    version 1 (SYSV), dynamically linked, 
    interpreter /lib64/ld-linux-x86-64.so.2, 
    BuildID[sha1]=dc453f393a417e09a78bf28f73b34f5514915c67, 
    for GNU/Linux 3.2.0, 
    stripped

# 例如
$ file libPrlDRI.so.1 
    libPrlDRI.so.1: ELF 64-bit LSB shared object, x86-64, 
    version 1 (SYSV), dynamically linked, 
    BuildID[sha1]=4446c029583e27ba19ebacd040700fc056a88c20, 
    stripped

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值