GCC编译流程及常用编辑命令

GCC 编译器在编译一个C语言程序时需要经过以下 4 步:

  1. 将C语言源程序预处理,生成.i文件。
  2. 预处理后的.i文件编译成为汇编语言,生成.s文件。
  3. 将汇编语言文件经过汇编,生成目标文件.o文件。
  4. 将各个模块的.o文件链接起来生成一个可执行程序文件。

GCC 编译流程如下图所示:

.i文件、.s文件、.o文件可以认为是中间文件或临时文件,如果使用 GCC 一次性完成C语言程序的编译,那么只能看到最终的可执行文件,这些中间文件都是看不到的,因为 GCC 已经经它们删除了。

当然,可以使用 GCC 选项看到这些中间文件,下节我们会讲解 GCC 选项。

linux下使用gcc命令编译代码

gcc命令提供了非常多的命令选项,但并不是所有都要熟悉.初学时掌握几个常用的就可以了,到后面再慢慢学习其他命令选项.

一,常用编译命令选项

假设源程序文件名为test.c

1.无选项编译链接

用法: #gcc test.c

作用: 将test.c预处理 汇编 编译 并链接形成可执行文件。这里未指定输出文件,默认输出为a.out 编译成功后可以看到生成了一个a.out的文件.在命令行输入./aout 执行程序 。 ./表示在当前目录, a.out为可执行程序文件名

2.选项 -o

用法: #gcc test.c -o test

作用: 将test.c预处理 汇编 编译并链接形成可执行文件test 。 -o选项用来指定输出文件的文件名。输入./test执行程序

3.选项 -E

 

转: http://c.biancheng.net/view/663.html

https://wenku.baidu.com/view/7ae93b68a45177232f60a2c6.html

原文地址:https://www.cnblogs.com/fps2tao/p/10935817.html

时间: 2024-09-29 19:42:49

GCC编译流程及常用编辑命令的相关文章

gcc编译流程

gcc的编译流程分为四个步骤,分别为: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) 以hello.c为例子,在这四个步骤中可以设置选项分别生成hello.i, hello.s, hello.o以及最终的hello文件:     hello.c : 最初的源代码文件:      hello.i : 经过编译预处理的源代码,将会把#开头的文件进行处理,包括宏以及包含等等,使用gcc -E(大写)命令可以输出此文件查看(注意

VI 光标移动及常用编辑命令

光标移动 左:h下:j上:k右:l 下一行行首:+上一行行首:-当前行行首:0当前行行尾:$ 后一个单词词首:w,W后一个单词词尾:e,E前一个单词词首:b,B 下一屏:CRTL+F上一屏:CRTL+B下半屏:CRTL+D上半屏:CRTL+U向上滚动屏幕: CRTL+Y向下滚动屏幕: CRTL+E跳到文件尾:G跳到文件头:g 当前屏幕首行:H当前屏幕末行:L当前屏幕中央:M 指定行:行号G,:行号 指定字符串前:/字符串,?字符串当前行指定字符前:f字符,F字符 文字追加和插入 当前光标右方追加

linux下的vi 常用编辑命令

一. unix linux 下标准编辑器为vi vi三种状态模式:命令模式(command mode ).插入模式(insert mode). 底行模式(last line mode ).一般可以把底行模式归为命令模式 ①命令模式: 控制屏幕光标的移动,字符.字或行的删除,移动复制某区域及进入 插入模式.或底行模式. 备注:插入模式和底行模式均是在命令模式的情况下切换过去的:从插入模式或底行模式跳出的时候,也是默认跳出到命令模式 ②插入模式: 只有在插入模式下才可以做文字的输入.按Esc 键退回

vi,vim常用编辑命令

1.插入命令:  a  在光标所在字符后插入  A  在光标所在行尾插入  i   在光标所在字符前插入  I   在光标所在行行首插入  o  在光标下插入新行  O  在光标上插入新行 2.定位命令 :set nu  设置行号 :set nonu  取消行号 gg  到第一行 G  到最后一行 nG  到第n行 :n  到第n行 $  移至行尾 0  移至行首 3.删除命令 x  删除光标所在处字符 nx  删除光标所在处后n个字符 dd  删除光标所在行,ndd删除n行 dG  删除光标所

gcc编译代码报错及编译方式

一.error: 'for' loop initial declarations are only allowed in C99 mode 前段时间写了一个小C程序,放在linux下用gcc编译出错,弹出以下错误: 百度后才知道,是gcc的模式问题. 我在for循环里习惯直接定义并初始化变量来使用: for(int i=0:i<length: i++) 而在gcc编译时是错误的,应该在循环外定义变量: int i; for(i = 0; i<length; i++) 这样才编译通过. 这是因为

gcc编译工具生成动态库和静态库之一----介绍

 1.库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链接阶段到底做了什么) 2 静态库和动态库的比较 链接静态库其实从某种意义上来说也是一种粘贴复制,只不过它操作的对象是目标代码而不是源码而已.因为静态库被链接后

gcc 编译

1.Gcc编译流程 1)预处理 gcc -E hello.c -o hello.i -o指目标文件. .i文件为已经过预处理的c原始程序 2)编译 gcc -S hello.i -o hello.s 3)汇编 gcc -c hello.s -o hello.o 4)链接 gcc hello.o -o hello gcc 编译选项 -c 只是编译不链接,生成目标文件.o -S 只是编译不汇编,生成汇编代码 -E 只进行预编译,不做其他处理 -o file 把输出文件输出到file里 -I dir

GCC编译命令常用选项

GCC是GUN Compiler Collection的简称,除编译程序外,还包含其他相关工具.GCC可将高级语言编写的源代码构建成计算机直接执行的二进制代码.GCC是Linux平台下最常用的编译程序,也是Linux平台编译器的事实标准.GCC支持四十余种不同目标体系结构(如X86系列.ARM及PowerPC等),可运行在不同的操作系统上(如Linux.Solaris及Windows等).GCC既支持基于宿主的开发(即在A平台上编译该平台使用的程序),也支持交叉编译(即在A平台上编译供B平台使用

gcc 编译过程及有关命令详解

用gcc编译.c文件流程 1 预处理阶段,输入c的源文件,编译器分析处理源代码文件中的各种宏指令,如"#ifdef,#endif,#include"等,进行去注释,头文件展开,宏替换等操作 .用户可以用 -E 参数让GCC在预处理结束后停止编译过程(gcc -E [source file(.c)] -o [output file(.i)]. 2 编译阶段,从高级语言转换为汇编语言,GCC在预处理后要检查代码规范,是否有语法错误.无误后翻译为汇编语言. GCC 的 -S 选项让GCC在进