29、共享对象与代码模型深入解析

共享对象与代码模型深入解析

1. 编译文件与依赖处理

在编译相关文件时,需按以下步骤执行命令:

# 创建主程序部分的目标文件
gcc -c  -o mainlib.o mainlib.c
# 创建库的目标文件
gcc -c -fPIC -o dynlib.o  dynlib.c
# 创建动态库本身
gcc -o dynlib.so -shared dynlib.o
# 创建可执行文件并将其与动态库链接
gcc -o main  mainlib.o dynlib.so

首先,像往常一样创建目标文件,接着使用 -shared 标志构建动态库。构建可执行文件时,需提供其依赖的所有动态库,因为这些信息要包含在 ELF 元数据中。注意 -fPIC 标志的使用,它强制生成位置无关代码,后续会在汇编中看到该标志的效果。

使用 ldd 检查文件依赖:

ldd main

输出结果可能显示我们新创建的库在依赖列表中,但 ldd 找不到它。尝试启动可执行文件会失败,并出现如下预期错误信息:

./main: error while loading shared libraries:
    lib.so: cannot open shared object file: No such file or directory
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值