ld连接脚本与.o文件

网友投稿 671 2022-11-13

ld连接脚本与.o文件

ld连接脚本与.o文件

通常脚本文件里面引用段都是 xxx.o(.text) xxx.o(.data) 我然后想到 xxx.o文件会不会关联到其他文件呢? .o文件也是 unix的库文件

在gcc中分析 .o文件

1 gcc -E 1.c -o 1.i 将宏定义展开 1 将所有#define删除,并且展开所有的宏定义 2 处理#include (猜测是留下一个接口,为以后连接) 3 删除所有注释 // /* */ 4 添加行号和文件名标识,以便于编译时产生的错误警告能显示行号 5 保留#pragma编译器指令 1.c

#include"zoz.h"int main(){ myprintf();}

1.i`

# 1 "1.c"# 1 ""# 1 ""# 1 "1.c"# 1 "zoz.h" 1void myprintf();# 3 "1.c" 2int main(){ myprintf();}

2 gcc -S 1.i -o 1.s 生成汇编代码

.file "1.c" .text .globl main .type main, @functionmain:.LFB0: .cfi_startproc leal 4(%esp), %ecx .cfi_def_cfa 1, 0 andl $-16, %esp pushl -4(%ecx) pushl %ebp .cfi_escape 0x10,0x5,0x2,0x75,0 movl %esp, %ebp pushl %ecx .cfi_escape 0xf,0x3,0x75,0x7c,0x6 subl $4, %esp call myprintf movl $0, %eax addl $4, %esp popl %ecx .cfi_restore 1 .cfi_def_cfa 1, 0 popl %ebp .cfi_restore 5 leal -4(%ecx), %esp .cfi_def_cfa 4, 4 ret .cfi_endproc.LFE0: .size main, .-main .ident "GCC: (GNU) 7.3.0" .section .note.GNU-stack,"",@progbits

3 gcc -c 1.s -o 1.o 生成机器码 4 链接

从 1到3 步骤可以知道看出 main.o(.data)为啥以.o文件为单元——— main.o 因为用了 main.o(.o文件)(.data)跟其他 (.data)无冲突 且.o文件不会涉及到 其他.o文件 的 bss data rodata text 段等

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用SSM+Layui+Bootstrap实现汽车维保系统的示例代码
下一篇:stm32f4 串口设置
相关文章

 发表评论

暂时没有评论,来抢沙发吧~