Linux 下gcc 编译c 程序⽣成可执⾏⽂件的过程
⼀、准备 hello.c ⽂件
1、在当前⽬录下新建c ⽂件
$:vim hello.c
2、按i 进⼊编辑模式。按esc 退出编辑模式,输⼊源代码
退出编辑模式,按住shift+两次z退出(命令⾏模式下,或者在底⾏模式下wq)
⼆、四个步骤
Linux下gcc编译c⽂件为可执⾏⽂件分为四个步骤: 分别是 预编译、编译、汇编、链接
1、预编译( ⽣成 hello.i ⽂件)
预编译器cpp 把源代码⽂件和相关的头⽂件(如stdio.h)预编译成⼀个 .i ⽂件
预编译的过程相当于
预编译的处理规则:
1. 将所有的 “#define” 删除,并展开所有的宏定义
2. 处理所有的条件预编译指令,⽐如:" #if #ifdef #elif #else #endif "
3. 处理所有的 “#include” 预编译指令
4. 删除所有的注释 “//” 、 “/* */”
5. 添加⾏号和⽂件名标识,以便编译时产⽣的⾏号信息以及⽤于编译错误或警告时能够显⽰⾏号
6. 保留所有的 “#pragma” 编译器指令
2、编译(⽣成汇编代码 hello.s)
编译过程是编译器gcc把预处理完的⽂件进⾏词法分析、语法分析、语义分析及优化后⽣成相应的汇编代码⽂件。
编译过程可以使⽤如下命令:
都可以得到汇编输出⽂件 hello.s
3、汇编(⽣成hello.o ⽂件)
汇编是 汇编器as 把汇编代码转变成中间⽬标⽂件。
汇编过程可以使⽤如下命令:#include  <stdio.h>int  main (void ){printf ("hello world");return  0;}
1
2
3
45
6$ gcc -E hello.c -o hello.i 或者 $ gcc  hello.c > hello.i
1$ gcc -S hello.i -o hello.s 或者 $ gcc -S hello.c -o hello.s
1$ gcc -c hello.s -o hello.o 或者 $ gcc -S hello.c -o hello.o
1
可以得到中间⽬标⽂件
linux下gcc编译的四个步骤4、链接(⽣成可执⾏程序)
链接器 ld:负责将程序的⽬标⽂件与所需的所有附加的⽬标⽂件连接起来,附加的⽬标⽂件包括静态连接库和动态连接库
链接是链接器ld把中间⽬标⽂件和相应的库⼀起链接成为可执⾏⽂件。
如果前⾯使⽤的是$ gcc hello.c命令,默认会产⽣⼀个a.out 的可执⾏⽂件,使⽤命令./a.out执⾏改可执⾏⽂件
如果前⾯使⽤的是 ./test执⾏该⽂件,上述两种⽅法效果是⼀样
的。运⾏可执⾏⽂件
注:上述步骤可以放在⼀起执⾏
$ gcc hello.c -o hello
./hello
参考⽂章
[1].
[2].
[3].$ gcc hello.o -o hello
1gcc −otesthello .c 命令,会产⽣⼀个test 的可执⾏⽂件,使⽤命令./hello
1

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。