GCC:The GNU Compiler Collection

它(GNU Compiler Collection)包含了多种语言的编译器,如 C, C++, Objective-C, Objective-C++, Java, Fortran和Ada。但每种编译器的名字不一样,gcc 和 g++ 分别是 gnu 的 c & c++ 编译器

gcc/g++ 在执行编译工作的时候,总共需要 4 步

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

1. gcc、g++、cc、CC

  • gcc 和 g++ 都是 GUN(组织)的编译器。

    • gcc 是 C 编译器;
    • g++是C++编译器;
  • linux 下 cc 一般是一个符号连接,指向 gcc;
    • CC 则一般是 Makefile 里面的一个名字,即宏定义,因为 Linux/Unix都是大小写敏感的系统,这点一定要注意。

2. 参数详解

  • -g:只是编译器,在编译的时候,产生调试信息。

    • -g为了调试用的,加个-g 是为了gdb 用,不然gdb用不到

    • -o output_filename,确定输出文件的名称为 output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out

      • 一般语法: gcc filename.c -o filename
      • 如果不加 -o filename 那么默认就是输出 filemame.out。这个-o就是用来控制输出文件的。
    • -c 只编译(compile)不链接,产生.o文件,就是obj文件,不产生执行文件
  • -O:Optimization,优化,O0/O1/O2/O3 ,
    编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 

  • -Wall:Warning all,W 要大写;

    生成所有警告信息。

    • ‘-Wcomment’ This option warns about nested comments.
    • ‘-Wformat’ This option warns about the incorrect use of format strings in functions such as printf and scanf, where the format specifier does not agree with the type of the corresponding function argument.
    • ‘-Wunused’ This option warns about unused variables.
    • ‘-Wimplicit’ This option warns about any functions that are used without being declared.
    • ‘-Wreturn-type’ This option warns about functions that are defined without a return type but not declared void. It also catches empty return statements in functions that are not declared void.

3. ar cqs

GNU GCC 实用工具 ar 的参数的意义:

ar key [args] [posname] archive [files]

将一组编译过的文件合并为一个文件。最常见的用法就是建立并更新由装载器(loader–ld)使用的库文件。在参数中,只有 key可以使用,但是每个key都可以加上附加的args(中间不带空格)。posname是合并后文件包的文件名。当移动或是替代files的时候,你可以在posname之前或之后进行说明.
files 可以有文件通配符,如 *.o。

key:

  • d 从文件包中删除文件
  • m 从文件包中移动文件到包尾
  • p 打印出文件包中的文件
  • q 在文件包尾加入文件.
  • r 在文件包中代替文件.
  • t 列出包中文件名为files指明的文件名的文件内容.
  • x 从文件包中解压出文件名为files指明的文件.

args:

  • a 与r或m共同使用来将files指明的文件放置于posname之后
  • b 与a作用相同,但是是在posname之前使用.
  • c 无提示模式创建文件包
  • i 与b相同.
  • s 强制重新生成文件包的符号表
  • T 只在Solaris中有这个参数.在不支持长文件名的文件系统中减短长文件名.没有这个操作的话,长文件的解压结果是错误的.
  • u 与r共同使用,用来仅取代那些在生成文件包之后改动过的文件.
  • v 细节化,并打印一个文件包的描述
ar cqs libmytest.a myfun.o

表示:
(1) 生成 静态库的文件名是 libmytest.a
(2) c 表示无提示模式创建文件包
(3) q 表示在文件包尾加入 myfun.o
(4) s 强制重新生成文件包的符号表

gcc/g++ 参数总结相关推荐

  1. Linux 之 编译器 gcc/g++参数详解

    2016年12月9日16:48:53 ----------------------------- 内容目录: [介绍]  gcc and g++分别是gnu的c & c++编译器 gcc/g+ ...

  2. gcc g++ 参数介绍

    C和C++ 编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文件: 预处理 (preprocessing),编译(compilation),汇编(assembly)和连接(linking).源 ...

  3. gcc/g++命令参数笔记

    1. gcc -E source_file.c -E,只执行到预编译.直接输出预编译结果. 2. gcc -S source_file.c -S,只执行到源代码到汇编代码的转换,输出汇编代码. 3. ...

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

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

  5. gcc/g++命令参数中文帮助手册

    引自: http://www.cnblogs.com/liangxiaxu/articles/2617367.html GCC 1 Section: GNU Tools (1) Updated: 20 ...

  6. gcc 自动识别的文件扩展名,gcc/g++ -x 选项指定语言,不同 gcc 版本 -std 编译选项支持列表

    对于执行 C 或者 C++ 程序,需要借助 gcc(g++)指令来调用 GCC 编译器. 对于以 .c 为扩展名的文件,GCC 会自动将其视为 C 源代码文件 对于以 .cpp 为扩展名的文件,GCC ...

  7. GCC编译选项参数介绍

    gcc和g++分别是gnu的c和c++编译器,下面是整理的常用编译选项参数: #(1). -x: 设定文件所使用的语言,使文件后缀名无效,如下,执行完后生成test.o gcc -c -x c++ t ...

  8. gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解

    例子:由多个源文件组成的C程序,经过编辑.预处理.编译.链接等阶段才能生成最终的可执行程序.此过程中,在__c__阶段可以发现被调用的函数未定义. A. 编辑和预处理 B. 预处理 C. 编译 D. ...

  9. gcc g++ Linux下动态库_静态库

    关于Unix静态库和动态库的分析 基本概念 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. 例如:libhello.so libhello.a 为了在同一系统中使用不同版本的库,可以在 ...

最新文章

  1. css3-transform
  2. 《论语》读后颜渊第十二主要大意
  3. 实战渗透之一个破站日一天
  4. .NET Framework源码研究系列之---Delegate
  5. java内存:堆、栈、常量池、方法区
  6. 国内外知名工业交换机品牌有哪些?
  7. 1.2-Nginx编译安装
  8. python中的order_Hive中Order by和Sort by的区别是什么?
  9. python strip_Python strip()方法
  10. Python爬虫之(五)Cookie和URLError
  11. 永久提升Chrome下载速度
  12. Lock锁确保线程安全
  13. 日常生活收缩毛孔几个小妙招 - 生活至上,美容至尚!
  14. 算法笔记 分治:循环赛日程 棋盘覆盖 选择问题 输油管问题 整数因子分解
  15. 新华三智慧计算联盟,集结!
  16. 发布会签到系统_系统开发_创建项目及应用
  17. python web项目打包部署_打包package
  18. Arcpy基础入门-6、arcpy要素属性操作
  19. 自己手动重写的equals方法与自动生成重写的equals方法的区别
  20. 2020腾讯阅文集团-前端笔试题

热门文章

  1. 国内达梦数据库相关函数-时间日期
  2. SQL中 ROW_NUMBER 函数的用法
  3. matlab跟maxwell联合优化,sim-sim-maxwell联合仿真遇到问题及解决方法
  4. 详解:Hive的MetaStore和三种配置方式
  5. redis的发布和订阅模式
  6. TensorFlow安装中遇到的问题
  7. Windows下Redis的使用
  8. c语言运算优先级与结合方向的问题
  9. qss 样式不生效--注释不能嵌套
  10. 安装配置mariadb-10.1.19