程序编译运行的过程

  1. 预处理。处理一些#include,#define命令,生成.i或者.ii文件;
  2. 编译。编译器进行语法分析,语义分析,中间代码生成,目标代码生成,优化,生成.s文件
  3. 汇编。汇编器把汇编代码翻译成机器码,生成.o文件
  4. 链接。链接器进行地址和空间分配,符号决议,重定位,生成.out文件。

编译器编译源代码后生成的文件叫做目标文件。目标文件从结构上讲,它是已经编译后的可执行文件格式,只是还没有经过链接的过程,其中可能有些符号或有些地址还没有被调整。

gcc和g++的区别

都是GNU组织的编译器
不同点 :

  1. gcc处理.c文件是以c语言为标准,而g++都是以c++为标准。二者的标准并不通用。
  2. gcc在链接c++程序的过程中,不能自动连接c++程序所使用的库,必须加上-lstdc++。
  3. 编译阶段,g++会调用gcc来进行编译。

常用参数的解释

  1. 无选项。默认4个步骤全部执行,直接生成可执行文件,默认为a.out

    gcc test.c

  2. -o,链接。

    gcc test.o -o test

  3. -c, 只执行前三个步骤,生成obj文件

    gcc -c test.c

  4. -S,只执行前两个步骤,生成汇编代码,生成.s文件

    gcc -S test.c

  5. -E, 只执行第一个步骤,需要指定一个重定向的输出文件,或者直接生成.i文件

    gcc -E test.c > test.log
    gcc -E test.c | more

  6. -include file。指定包含的文件
  7. -C 在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的。(暂时没用到)
  8. -O0;-O1;-O2;-O3.优化级别,O0无优化,O3优化最多,但是时间消耗也多。
  9. -g,在编译的时候,产生调试信息。
  10. -share, 编译动态库。
  11. -w,不产生警告信息
  12. -Wall,打印所有警告信息
  13. -std=Cxx,指定编译的C版本

gcc and g++ 常用参数解释的更多相关文章

  1. [转] Linux中gcc,g++常用编译选项

    http://blog.sina.com.cn/s/blog_5ff2a8a201011ro8.html gcc/g++ 在执行编译时,需要4步 1.预处理,生成.i的文件[使用-E参数] 2.将预处 ...

  2. [转]GCC常用参数详解

    简介gcc and g++现在是gnu中最主要和最流行的c & c++编译器 .gcc/g++在执行编译工作的时候,总共需要以下几步:1.预处理,生成.i的文件[预处理器cpp]2.将预处理后 ...

  3. gcc与g++区别以及相关参数详解

    ---恢复内容开始--- 原文链接:g++和gcc的区别 一 .二者区别 gcc和g++都是GNU(一个组织)的编译器. 1.对于.c后缀的文件,gcc把它当做是C程序:g++当做是C++程序: 2. ...

  4. GCC常用参数详解

    转载:http://www.cnblogs.com/zhangsir6/articles/2956798.html 简介gcc and g++现在是gnu中最主要和最流行的c & c++编译器 ...

  5. CSAPP阅读笔记-gcc常用参数初探-来自第三章3.2的笔记-P113

    gcc是一种C编译器,这次我们根据书上的代码尝试着使用它. 使用之前,先补充前置知识.编译器将源代码转换为可执行代码的流程:首先,预处理器对源代码进行处理,将#define指定的宏进行替换,将#inc ...

  6. gcc/g++ 的参数总结(二)

    gcc 参数总结 如果是 c++,直接将 gcc 改为 g++ 即可. 1. gcc 编译流程 预处理,Pre-Processing:gcc -E test.c -o test.i //.i文件 编译 ...

  7. angular-cli.json配置参数解释,以及依稀常用命令的通用关键参数解释

    一. angular-cli.json常见配置 { "project": { "name": "ng-admin", //项目名称 &quo ...

  8. 常用cl编译命令参数解释

    紧接前文,第一行cl命令如下: 1>  cl /c /IC:\...\include /ZI /nologo- /W3 /WX- /sdl /Od /Oy- /D WIN32 /D _DEBUG ...

  9. gcc和g++

    一.GCC GNU编译器套件(GNU Compiler Collection)包括C.C++.Objective-C.Fortran.Java.Ada和Go语言的前端,也包括了这些语言的库(如libs ...

随机推荐

  1. Windows挂载NFS共享盘

    Centos7添加NFS方法请见如下链接: https://www.cnblogs.com/jackyzm/p/10285845.html 一:添加NFS服务 1.1:此电脑-右键-管理-window ...

  2. 前端校验框架ValidForm之check方法修正

    用过validform的朋友相信都知道,在利用check方法的时候,发现该方法对表单输入值只要符合datatype规则的就返回ture.那么我们想对某个字段进行ajax重复校验的时候,只需要在该表单元 ...

  3. IT技术

    一.通信网络 TCP/IP协议 路由交换技术 二.编程语言 C/C++ python JAVA 三.数据库 关系型数据库 (1)MySQL  MySQL学习笔记一 MySQL学习笔记二 2.  非关系 ...

  4. [工控安全]西门子S7-400 PLC固件逆向分析(一)

    不算前言的前言:拖了这么久,才发现这个专题没有想象中的简单,学习的路径大致是Step7->S7comm->MC7 code->firmware,我会用尽量简短的语言把前两部分讲清楚, ...

  5. Problem 3: Largest prime factor

    The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 60085 ...

  6. Java randomString

    public static String randomString(int strLength) { Random rnd = ThreadLocalRandom.current(); StringB ...

  7. php字符串转数组

    下面代码包括了含有中文汉字的字符. function str2arr($str) { $length = mb_strlen($str, 'utf-8'); $array = []; for ($i= ...

  8. java 学习笔记

    charAt(1) ;返回下表为1 的 length 返回长度 indexOf("XXX")返回XX在的位置(开始位置) startWith() y以什么开始 endWith()以 ...

  9. c++ stl sort 自定义排序函数cmp要遵循 strict weak ordering

    满足strict weak ordering的运算符能够表达其他所有的逻辑运算符(logical operator): <(a, b)  : (a < b) <=(a, b): !( ...

  10. java集合(二)