美文网首页
程序员自我修养4-静态链接

程序员自我修养4-静态链接

作者: S_s_s_a53f | 来源:发表于2017-08-06 16:24 被阅读0次

使用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
以上把整个编译链接过程的步骤打印出来

相关文章

网友评论

      本文标题:程序员自我修养4-静态链接

      本文链接:https://www.haomeiwen.com/subject/jxaglxtx.html