使用ld链接器将“a.o”和"b.o"链接起来:
ld a.o b.o -e main -o ab
-e main 表示将main函数作为程序入口,ld链接器默认的程序入口的为_start.
-o ab表示链接输出文件名为ab,默认为a.out
objdump -d a反汇编a代码
objdump -r查看目标文件重定位表
ELF定义了两种特殊段:
.init该段里面保存的是可执行指令,它构成了进程的初始化代码。
.fini该段保存着进程终止代码指令。
API往往是指源代码级别的接口,ABI指二进制层面的接口。ABI的兼容程序比API要更为严格。
一个静态库可以简单地看成一组目标文件的集合,比如在Linux中最常用的C语言静态库libc位于/usr/lib/libc.a,它属于glibc项目的一部分;像windows这样的平台上,最常使用的C语言库是由集成开始环境所附带的运行库。
通常使用"ar"压缩程序将零散的目标文件压缩到一起,并且对其进行编号和索引,以便于查找和检索,就形成了libc.a这个静态库文件。
ar -t libc.a
查看这个文件包含了哪些目标文件。
gcc -static --verbose -fno-builtin hello.c
以上把整个编译链接过程的步骤打印出来
网友评论