zoukankan      html  css  js  c++  java
  • GCC参数使用

    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
    ", argv [0]); 
        return -1; 
      } 
      else 
      { 
       n = atoi (argv[1]); 
       printf ("Factorial of %d is %d.
    ", 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

  • 相关阅读:
    Opencv 图像矩
    Opencv Convex Hull (凸包)
    Opencv 发现轮廓 findContours
    Opencv Match Template(轮廓匹配)
    python操作mysql数据库的常用方法使用详解
    mongodb数据库集群及sharding分片配置
    mongodb数据库安装及常见操作
    windows下搭建eclipse关于python的开发环境及初始化参数配置
    python环境下使用tab自动补全命令
    ubuntu系统初始化网络及mysql配置
  • 原文地址:https://www.cnblogs.com/yxzfscg/p/5341652.html
Copyright © 2011-2022 走看看