共享对象与代码模型深入解析
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
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



