$ gcc-s hello gcc . I $ lshello gcc . c hello gcc . I hello gcc . s $ cathelo gcc . s查看汇编代码,看看生成了什么 。
汇编
使用刚刚生成的汇编代码创建一个目标文件:
$ as-o hello gcc . o hello gcc . s $ lshello gcc . c hello gcc . I hello gcc . o hello gcc . s链接要生成可执行文件,必须将目标文件链接到它所依赖的库 。这不像前面的步骤那么简单,但很有启发性:
$ ld -o hellogcc hellogcc.old:警告:找不到入口符号_ start默认为00000000000401000000 LD:hello gcc . o:在函数’ main`: hellogcc.c.text+0xa)中:链接器搜索libc.so库后,对’ puts ‘的未定义引用出现引用未定义puts的错误 。您必须找到正确的链接器选项来链接必要的库,以解决这个问题 。这不是小技巧,这取决于你系统的布局 。
链接时,必须将代码链接到核心运行时(CRT)目标,这是一组帮助二进制可执行文件启动的子例程 。链接器还需要知道在哪里可以找到重要的系统库,包括libc和libgcc,尤其是特殊的开始和结束指令 。这些指令可以用- start-group和- end-group选项分隔,或者使用到crtbegin.o和crtend.o的路径
此示例使用RHEL 8上的路径,因此您可能需要根据您的系统调整路径 。
$ LD-dynamic-linker/lib 64/LD-Linux-x86-64 . so . 2 \-o hello \/usr/lib 64/CRT 1 . o/usr/lib 64/crti . o \-start-group \-L/usr/lib/gcc/x86 _ 64-red hat-Linux/8 \-L/usr/lib 64-L/lib 64 hello . o \-lgcc \-按需-lgcc _ s \-no-按需-lc -lgcc
$ LD-static-o hello \-L/usr/lib 64/gcc/x86 _ 64-slackware-Linux/11 . 2 . 0/\/usr/lib 64/CRT 1 . o/usr/lib 64/crti . o hello . o/usr/lib 64/crtn . o \-start-group \-LC-lgcc-lgcc _ eh \-end-group现在,运行生成的可执行文件:
$ ./helloHello,GCC!这里有一些有用的工具,可以帮助检查文件类型、符号表和链接到可执行文件的库 。
【如何清理c盘空间不影响系统 assembly文件夹可以删除吗】使用文件实用程序来确定文件的类型:
$ file hello gcc . chellogcc . C:C source,ASCII text $ file hello gcc . ohellogcc . o:ELF 64位LSB可重定位,x86-64,version 1 (SYSV),未剥离$ file hellogcchellogcc位LSB可执行文件,x86-64,version 1 (SYSV),动态链接,解释器/lib64/LD-Linux-x86-64.so.2,buildid[sha1]= bb 76 b 241d 7d 00871881
$ nm hellogcc 。o00000000000000000 t main u puts使用ldd实用程序列出动态链接库:
$ ldd hellogcclinux-vdso . so . 1(0x 00007 FFE 3 BDD 7000)libc . so . 6 = & gt;/lib 64/libc . so . 6(0x 00007 f 22395 e 00)/lib 64/LD-Linux-x86-64 . so . 2(0x 00007 f 2233 b 7e 000)摘要在本文中,您了解了GCC编译中的各种中间步骤,并检查了文件类型和符号表 。下次你使用GCC的时候,你会明白为你生成一个二进制文件的步骤,当出现一些错误的时候,你会知道如何一步步解决问题 。
途经:https://opensource.com/article/22/5/gnu-c-compiler
作者:Jayashree Huttanagoudar主题:lkxed译者:robsean校对:wxy
本文由LCTT原创,并由Linux中国提供荣誉 。
- 中国古代宫女是如何应对"例假期"的?
- 如何使用打印机打印 如何使用打印机
- 面试时,如何做好3分钟自我介绍?
- 小青龙不马上吃如何保存
- 关于盘他是什么梗的信息
- 在文景二帝时期,西汉国力究竟是如何显著增强的?
- 烤红薯用烤盘烤还是直接放在烤架 烤红薯用烤盘还是烤网
- 北京自采暖补贴如何领取 北京自采暖补贴如何发放2022
- 苹果手机如何拦截骚扰电话和广告推销电话 苹果手机如何拦截淘宝短信
- 如何快速缓解隔夜酒 快速缓解隔夜酒