gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步

1.预处理,生成.i的文件[预处理器cpp] 
2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs] 
3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as] 
4.连接目标代码,生成可执行程序[链接器ld]

按照上述步骤,GCC的命令为

(1) 预处理.  -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.

例如 gcc -E test.c 则会将预处理完的文件输出在屏幕上,可以重定向到文件中,

gcc -E test.c test.i 在GCC命令中 -o 制定目标文件,

所以上面也可以这么写 gcc -E test.c -o test.i

(2) 编译. -S 只激活预处理和编译,就是指把文件编译(.i)成为汇编代码(.s)

gcc -S test.i

不需要自定义输出文件,上面的命令自动输出为test.s

(3) 汇编. -c 将汇编文件(.s) 编译输出(.o)文件

gcc -c test.s

上面命令会生成新文件test.o

其实,可以-c可以从源文件直接到.o文件

gcc -c test.c

(4) 链接。链接得到最终的可执行文件

gcc test.o (得到默认的a.out)

gcc test.o -o test

当然也可以一步就得到

gcc test.c -o test (顺序可变化,例如gcc -o test test.c)

其他的参数命令

-O 用法:#gcc -O1 test.c -o test 
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长

-include file 
  包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以用它设 
定,功能就相当于在代码中使用#include<filename> 
  例子用法: 
  gcc hello.c -include /root/pianopan.h

-C 
  在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的

多文件

文件1 factorial.c

int factorial (int n)
{
  if (n <= 1)
   return 1;
  else
   return factorial (n - 1) * n;
}

文件2 main.c

#include <stdio.h>
#include <unistd.h>
int factorial (int n);
int main (int argc, char **argv)
{
  int n;
  if (argc < 2)
  {
    printf ("Usage: %s n\n", argv [0]);
    return -1;
  }
  else
  {
   n = atoi (argv[1]);
   printf ("Factorial of %d is %d.\n", n, factorial (n));
   }
  return 0;
}

 利用如下的命令可编译生成可执行文件,并执行程序:

$ gcc -o factorial main.c factorial.c
$ ./factorial 5
Factorial of 5 is 120.

  

参考文章

http://www.cppblog.com/SEMAN/archive/2005/11/30/1440.html

http://wenku.baidu.com/link?url=gNMJetAMQ7woUWHXQ7vZ6kNIoO81lL20-3mRKDz_8yD0hI3351MMlgqetfEUCAnzgzJpUDsAxCIXoUlwcvujNAreI6q4dD0tD5sWtm-2ehG

GCC参数使用的更多相关文章

  1. GCC参数详解

    GCC参数详解 [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件 2.将预处理后的文件不转换成汇 ...

  2. 在mk/rte.app.mk 256行加echo $(O_TO_EXE_DO)查看GCC参数

    在mk/rte.app.mk 256行加echo $(O_TO_EXE_DO)查看GCC参数,如:

  3. GCC参数详解 一

    gcc是gnu compiler collection 的简称,他包含了多种语言的编译器,如C, C++, Objective-C, Objective-C++, Java, Fortran和Ada. ...

  4. gcc参数PIE和PIC的区别和共同点

    gcc参数的PIE和PIC 区别 PIE:用在可执行文件 PIC:用在库文件 共同点 生成跟位置没有关系的symbol

  5. gcc参数-l传递顺序错误导致`undefined reference'的一点小结

    刚才编译一个pthread的单文件程序, 使用的命令行是: gcc -o thread1 -lpthread thread1.c 结果报错: $ gcc -o thread1 -lpthread th ...

  6. [转]GCC参数详解

    [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件不转换成 ...

  7. GCC参数详解 二

    1简介 2简单编译 2.1预处理 2.2编译为汇编代码(Compilation) 2.3汇编(Assembly) 2.4连接(Linking) 3多个程序文件的编译 4检错 5库文件连接 5.1编译成 ...

  8. C语言基础(21)-C语言编译过程及GCC参数简介

    任何C语言的编译过程可分为以下三部分: 一.预编译 在C语言中,以#开头的语句又叫预编译指令.预编译主要做以下两件事情: 1.将#include包含的头文件做简单的文本替换: 2.将代码中的注释删除. ...

  9. GCC 参数详解

    转载出处:http://blog.csdn.net/yff1030/article/details/8592077 原文:http://www.cppblog.com/SEMAN/archive/20 ...

随机推荐

  1. python中数据类型转换

    python中list和str互转   1.list转str 假设有一个名为test_list的list,转换后的str名为test_str 则转换方法: test_str = "" ...

  2. Asp.Net中OnClientClick与OnClick的区别

    当我们当击这个按钮时,自动先执行的客户端,再执行服务器端的.如果客户端返回的是false,那么服务器端对应的方法永远不会执行.这样就达到检测,只有通过才去执行服务器端的方法.

  3. poj2996

    /*排序函数要写对,优先级:K,Q,R,B,N,P 白色的:如果优先级一样,那么按照行数大的优先,如果行数一样,那么列数小的优先 黑色的:如果优先级一样,那么按照行数小的优先,如果行数一样,那么列数小 ...

  4. python中定制类

    1.python中__str__和repr 如果要把一个类的实例变成 str,就需要实现特殊方法__str__(): class Person(object): def __init__(self, ...

  5. nginx 第一天

    来公司第一天先装了一下nginx 第一步:  先装brew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/ ...

  6. C++命名(自定义)

    1.自定义函数 void GetName(): 2.布尔型变量 BOOL ISOPEN:

  7. java jvm内存管理/gc策略/参数设置

    1. JVM内存管理:深入垃圾收集器与内存分配策略 http://www.iteye.com/topic/802638 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想 ...

  8. spark启动

    注意在启动spark时候要指定参数 要不就死启动的单机版的 /usr/local/spark-1.5.2-bin-hadoop2.6/bin/spark-shell \ --master spark: ...

  9. 俄罗斯最新开源的牛掰数据库ClickHouse

    ClickHouse是俄罗斯最近刚刚开源的用于数据库管理系统能够实时生成分析数据报告,性能非常强悍! 使用SQL查询. 他拥有切割你的数据更多的新方法 ClickHouse的性能超过同类市场上目前用于 ...

  10. get the request body of all quests before handle it

    https://stackoverflow.com/questions/23660340/need-to-log-asp-net-webapi-2-request-and-response-body- ...