程序编译运行的过程

  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. 基于react的MQ管理系统遇到的问题以及解决办法

    跟一般的管理系统差不多 一.需求 1.新增申请和修改的弹窗里面的部门跟应用组改成下拉框,并调取后台接口获取到相应的值.1.1相应的代码 // 获取部门 getDepartment = () => ...

  2. linux实时时钟相关函数

    time 功能:获取1970年1月1日00:00:00到现在的秒数 原型:time_t time(time_t *t); 参数: t:获取到的秒数 返回:获取到的秒数 说明:在time.h中定义了ti ...

  3. maven源码打包

    1.打包时附加外部Jar包 <!--编译+外部 Jar打包-->          <plugin>            <artifactId>maven-co ...

  4. top和nvidia-smi无法显示占用GPU的PID问题

    通过nvidia-smi查看显卡使用情况,发现显卡在被占用,但是却没有提示占用显卡的进程id, 这时可以输入 fuser -v /dev/nvidia* 可以查看到, 再利用sudo kill -9 ...

  5. linux date使用

    Linux date 格式化时间和日期 [root@linuxidc ~]# date -d today +"%Y-%m-%d"  2016-11-26 [root@linuxid ...

  6. Hadoop学习------Hadoop安装方式之(三):分布式部署

    这里为了方便直接将单机部署过的虚拟机直接克隆,当然也可以不这样做,一个个手工部署. 创建完整克隆——>下一步——>安装位置.等待一段时间即可. 我这边用了三台虚拟机,分别起名master, ...

  7. crontab定时执行shell脚本失败的原因

    有一段时间不用crontab定时执行任务了,这次趁着项目实施的机会来进一步分析一下crontab定时任务设置时遇到的一些棘手的问题. crontab -l 查看目前已经设置的crontab信息 cro ...

  8. Java 8 Lambda 表达式(一)

    Java 8 新特性 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). 使用 Lambda 表 ...

  9. java clone()

    Java中对象的创建   clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象 ...

  10. 【leetcode】492. Construct the Rectangle

    problem 492. Construct the Rectangle 参考 1. Leetcode_492. Construct the Rectangle; 完