0
点赞
收藏
分享

微信扫一扫

Linux程序编译相关

zibianqu 2022-04-24 阅读 81
编辑器

预处理(preprocessing):

头文件、宏定义(#include, #ifdef, #define)

gcc -E test.c -o test.i

编译(compilation):

汇编语言

gcc -S test.i -o test.s

汇编(assembly):

机器语言

gcc -C test.s -o test.o

链接(linking):

链接依赖库

静态链接:将依赖的库都添加进可执行文件

动态链接:只添加描述性的信息,程序执行时再加载相应的动态库

编译静态库:

ar -r test.o -o libtest.a

编译动态库:

gcc -share -fPIC test.o -o libtest.so

静态链接:

gcc main.c -static -L./ -ltest -o exe

动态链接:

gcc main.c -L./ -ltest -o exe

ELF(executable linkable format):

readelf -S exe

.test:代码段

.data:数据段,包括已初始化的全局变量、局部静态变量

.bss:未初始化的全局变量、局部静态变量,可能还有已初始化为默认值的全局变量和局部静态静态变量。该段不占用flash大小

.rodata:只读数据段,如字符串常量、const变量

.comment:注释信息段

.note.GNU-stack:堆栈提示段

反汇编:

objdump -S exe(可以将C语言代码混合显示出来,前提是gcc需要加-g选项)

举报

相关推荐

0 条评论