栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

GCC编译器背后的故事

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

GCC编译器背后的故事

目录
  • 1、准备工作
  • 2、将源文件 test.c 文件预处理生成 test.i
  • 3、将预处理生成的 test.i 文件编译生成汇编程序 test.s
  • 4、将编译生成的 test.s 文件汇编生成目标文件 test.o
  • 5、使用动态库进行链接,生成的 ELF 可执行文件的大小和链接的动态库
  • 6、使 用 静 态 库 进 行 链 接 , 生成的 ELF 可执行文件的大小和链接的动态库
  • 7、使用 readelf -S 查看其各个 section 的信息
  • 8、使用 objdump -D 对其进行反汇编

1、准备工作

编写一个简单的程序:

 #include  
 int main(void) 
 { 
 printf("Hello World!n"); 
 return 0; 
 }

2、将源文件 test.c 文件预处理生成 test.i
gcc -E test.c -o test.i


3、将预处理生成的 test.i 文件编译生成汇编程序 test.s
gcc -S test.i -o test.s


4、将编译生成的 test.s 文件汇编生成目标文件 test.o
将编译生成的 test.s 文件汇编生成目标文件 test.o

5、使用动态库进行链接,生成的 ELF 可执行文件的大小和链接的动态库
gcc test.c -o test
size test

ldd test

可以看出该可执行文件链接了很多其他动态库,主要是 Linux 的 glibc 动态库。

6、使 用 静 态 库 进 行 链 接 , 生成的 ELF 可执行文件的大小和链接的动态库
gcc -static test.c -o test 
size test



说明没有链接动态库。

7、使用 readelf -S 查看其各个 section 的信息
readelf -S test

8、使用 objdump -D 对其进行反汇编
objdump -D test

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311160.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号