C语言编译流程
来源:互联网 发布:手机版淘宝怎么改评价 编辑:程序博客网 时间:2024/05/16 12:12
- 1编译流程图示
- 2编译各阶段命令
- 2-1预处理阶段
- 2-2 编译阶段
- 2-3 汇编阶段
- 2-4 链接阶段
- 3例子
1、编译流程图示
我们在Linux环境下编译单个C文件时,最简单的方法是输入一条命令gcc hello.c
就可以生成默认的可执行文件a.out
,展开该命令可以看到实际流程如下。
(编译命令参数请看 gcc使用手册 )
预处理阶段 -> 编译阶段 -> 汇编阶段 -> 链接阶段
2、编译各阶段命令
- 预处理阶段
- 编译阶段
- 汇编阶段
- 链接阶段
2-1预处理阶段
把.c文件预处理命令替换为对应的头文件内容,并合并成.i文件中。
gcc -E -o hello.i hello.c
预处理阶段主要处理下面四件事:
- 将头文件内容包含进.c源文件中;
- 删除注释;
- 宏替换;
- 条件编译;
2-2 编译阶段
把源文件编译成汇编语言,并生成.s文件。
gcc -S -o hello.s hello.i// orgcc -S -o hello.s hello.c
2-3 汇编阶段
把源文件汇编成机器语言,并生成.o目标文件。
gcc -o hello.o -c hello.s// orgcc -o hello.o -c hello.igcc -o hello.o -c hello.c
2-4 链接阶段
把源文件链接成可执行文件(Linux下的文件名后缀是随便可取的,只是文件里的内容格式不变而已)。
gcc -o hello hello.o// orgcc -o hello hello.sgcc -o hello hello.igcc -o hello hello.cgcc hello.c
3、例子
wu_being@UbuntuKylin1704:~/Code/C/test_cpp$ wu_being@UbuntuKylin1704:~/Code/C/test_cpp$ lsmymathfun.c mymath.h mymath_test.cwu_being@UbuntuKylin1704:~/Code/C/test_cpp$ cat -n mymath_test.c 1 #include <stdio.h> 2 #include "mymath.h" 3 4 int main() 5 { 6 printf("My Pi: %lf\n", my_pi()); 7 return 0; 8 } 9 wu_being@UbuntuKylin1704:~/Code/C/test_cpp$ gcc mymath_test.c /tmp/ccRCzDfw.o:在函数‘main’中:mymath_test.c:(.text+0x5):对‘my_pi’未定义的引用collect2: error: ld returned 1 exit statuswu_being@UbuntuKylin1704:~/Code/C/test_cpp$ gcc mymath_test.c mymathfun.c wu_being@UbuntuKylin1704:~/Code/C/test_cpp$ ./a.out My Pi: 3.141593wu_being@UbuntuKylin1704:~/Code/C/test_cpp$ wu_being@UbuntuKylin1704:~/Code/C/test_cpp$ vim mymath_test.c wu_being@UbuntuKylin1704:~/Code/C/test_cpp$ cat -n mymath_test.c 1 #include <stdio.h> 2 #include "mymath.h" 3 #include "mymathfun.c" 4 5 int main() 6 { 7 printf("My Pi: %lf\n", my_pi()); 8 return 0; 9 } 10 wu_being@UbuntuKylin1704:~/Code/C/test_cpp$ gcc mymath_test.c wu_being@UbuntuKylin1704:~/Code/C/test_cpp$ ./a.out My Pi: 3.141593wu_being@UbuntuKylin1704:~/Code/C/test_cpp$ gcc mymath_test.c mymathfun.c /tmp/ccMnE10S.o:在函数‘my_pi’中:mymathfun.c:(.text+0x0): `my_pi'被多次定义/tmp/cc89I2rk.o:mymath_test.c:(.text+0x0):第一次在此定义collect2: error: ld returned 1 exit statuswu_being@UbuntuKylin1704:~/Code/C/test_cpp$
Wu_Being博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
《C语言编译流程》: http://blog.csdn.net/u014134180/article/details/78329908
如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。
阅读全文
0 0
- C语言编译流程
- C语言编译流程
- 黑马程序员-iOS-C语言-源程序编译执行流程
- 通过流程图对比编译型语言,解释型语言以及C#,JAVA的编译流程
- c语言编译流程(c语言是如何变成可执行文件的)
- c程序编译流程
- C&C++编译流程
- C语言流程控制
- C语言逻辑流程
- C语言开发流程
- C语言编程流程
- C/C++程序编译流程
- 编译C程序的流程
- C语言编译链接流程以及重要特性在编译器中实现
- java开发C语言解释器:编译并实现IfElse语句逻辑流程
- C语言编译预处理
- C语言编译过程
- C语言编译过程
- 9.1 爬虫及爬行方式
- vue-cli入门(二)——人员管理实例小demo
- 创业有套路
- 作业题:循环
- 我遇到的org.apache.axis2.AxisFault: First Element must contain the local name, Envel
- C语言编译流程
- JS对象封装例子
- PyCharm使用指南(未完成)
- 【caffe编译踩坑】解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题
- Windows 下载安装JDK
- centos 7 VNC Viewer: Timed out waiting for a response from the host computer
- Swift中如何使用 ++, --运算符
- 呼出/关闭软键盘
- Adobe DC 2018 安装&破解