编译:当前源代码编译成二进制目标文件(.obj文件)
链接(link):将生成的.obj文件与库文件.lib等文件链接,生成可执行文件(.exe文件)。
一个现代编译器的主要工作流程如下:
源程序(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→连接器(链接器,Linker)→可执行程序(executables)
http://blog.sina.com.cn/s/blog_62ef2f14010145ds.html
执行过程 虽然我们称Gcc是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶
1.预处理(也称预编译,Preprocessing):命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。
2.编译(Compilation):接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。
3.汇编(Assembly):汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。
4.链接(Linking):当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到 的库函数也从各自所在的档案库中连到合适的地方。
实例:
1.编写.c文件如下:
#include
int main()
{
printf("This is my first c program in ubuntu");
return 0;
}
2.预编译过程:
gcc -E ./hello.c -o hello.i //.i 为后缀的文件,是已经预处理过的C源代码文件,可以省略这一步。
cat hellp.c | wc -l //查看hello.c文件内容的行数。
cat hellp.i | wc -l //查看hello.i文件内容的行数。
3.汇编过程:
gcc -S hello.i -o hello.s //.s为后缀的文件,是汇编语言源代码文件;可以省略这一步。
4.编译过程
gcc -c ./hello.c //在当前文件夹下生成hello.o .o为后缀的文件,是编译后的目标文件;
gcc -c hello.c -o hello.o //在当前文件夹下生成hello.o
5.链接过程:
gcc hello.o -o hello
6.直接把hello文件拖动到终端即可执行。
内容九:用g++编译c++源程序
用g++编译c++源程序和c语言类似,可将gcc改为g++逐个尝试。以下只提供一些简单介绍:
-E Preprocess only; do not compile, assemble or link
-S Compile only; do not assemble or link
-c Compile and assemble, but do not link
-o Place the output into
相关推荐
C语言程序的编译需要经过预处理、编译、汇编、链接的过程,虽然使用gcc命令不用关心中间过程,但是每次编译都有这个过程。 多步骤的编译过程可以提高代码的可维护性和编译效率。本例子分步骤执行了C语言在gcc编译器...
【GCC编译C程序】是Linux环境中开发C语言软件的核心环节。GNU编译器集(GCC),最初称为GNU C编译器,由Richard Stallman在1987年发起,旨在构建符合自由软件理念的编译器,用于构建GNU项目中的其他软件。GCC很快因...
例如,如果你有一个名为`main.c`的C程序,你可以通过以下命令来编译并生成RTL文件: ```bash gcc -fdump-rtl-expand main.c -o main ``` 这将在当前目录下生成一个名为`main.expand`的文件,其中包含了`main.c`的...
这个简单的C语言程序展示了如何处理输入、进行基本的数学运算并输出结果。通过这样的实践,初学者可以更好地理解C语言的语法和流程控制,为进一步学习更复杂的编程概念打下坚实的基础。此外,这个例子也可以扩展到...
`build-essential`是一个包含了一系列基础编译工具的软件包,它包括了GCC(GNU Compiler Collection)和Make等,这些都是在Linux环境下编译C语言程序所必需的。在Deepin系统中,你可以通过打开终端并输入以下命令来...
gcc-core-6.3.0-1-mingw32-bin.tar.xz c语言编译库 gnu gcc
在《AVR单片机GCC程序设计》.pdf这本书中,你可能会学习到如何配置和使用AVR-GCC编译环境,如何编写和调试程序,以及如何利用GCC的优化选项提高代码性能。此外,书中可能还会介绍如何使用AVR Studio或类似IDE进行...
8. **编译与调试**:理解如何使用编译器(如GCC)将源代码编译为可执行文件,以及如何使用调试工具(如GDB)来查找和修复代码中的错误。 9. **版本控制**:尽管未直接提及,但源码包的分享通常意味着开发者使用了...
使用GCC和G++编译C++程序的基本步骤如下: 1. 创建源代码文件,例如`hello.cpp`。 2. 使用G++编译源代码: ```bash g++ -o hello hello.cpp ``` 这里,`-o hello`指定输出的可执行文件名为`hello`。 3. 运行...
此外,还有许多语言特定的选项,如 `-ansi` 用于C语言编译时遵循ANSI标准,`-fno-builtin` 禁止将某些函数视为内置函数,`-Wall` 开启所有警告,`-Werror` 把警告当作错误处理等。这些选项允许用户根据需求调整编译...
在 Linux 下要编译一个 C 语言源程序,需要使用 GNU 的 gcc 编译器。gcc 编译器有许多选项,常用的选项有 -o、-c、-g 等。其中,-o 选项表示输出的可执行文件名,-c 选项表示只输出目标代码,不输出可执行文件,-g ...
12. **编译和调试**:项目开发过程中,使用编译器(如GCC)编译代码,调试器(如GDB)查找并修复错误。 通过研究这个项目,不仅可以掌握C语言的基本语法,还能了解如何将这些知识应用于实际问题,提高编程能力和...
《C语言程序设计--第三版》是一本针对初学者和进阶者的经典教材,全面而深入地介绍了C语言的基础知识和编程技巧。本书旨在帮助读者理解C语言的语法特性,掌握程序设计的基本方法,培养良好的编程习惯,并为后续的...
在Linux下,如果要编译一个C语言源程序,我们需要使用GNU的gcc编译器。gcc编译器有许多选项,常用的选项包括: * -o 选项:表示我们要求输出的可执行文件名。 * -c 选项:表示我们只要求编译器输出目标代码,而不必...
本文将深入探讨GCC-Linaro的交叉编译资源,以及如何在Ubuntu 64位主机上利用它来为Aarch64架构的设备编译程序。 GCC(GNU Compiler Collection)是GNU项目的一部分,提供了C、C++、Objective-C、Fortran、Ada和Go等...
学习如何使用assert断言来预防和找出程序中的错误,以及如何利用gcc编译器的警告信息改进代码质量,都是提升编程技能的关键。 在高级主题中,可能会涵盖结构体和联合体的使用,位操作,以及指针和数组的高级应用。...
C语言再学习 -- GCC编译过程-附件资源