前几天在学习嵌入式入门时,有一个视频中就是介绍gcc的使用的,看了视频后突然好

  想将GCC的手册页翻译出来,后来看到手册页发现实在太多了,凭我个人的能力根本无

  法完成,只能写一些自己使用Gcc时的一些常规使用方法.

  GCC是GNU的成员之一,原意是GNU的C语言编译器,后来发展到不只能够编译C语

  言,他还支持编译C++,OBJECTIVE-C等多种计算机语言时,现在的意思就变成了GNU

  的编译器集合了.

  一般用法:

  gcc [Options] Infile......

  描述:

  当你常规使用gcc编译一个程序时,他通常执行4个步骤:预编译,编译,汇编,连接.

  当然你可以通过指定某个选项来使它停止在某个步骤上.如你可以通过指定选项-S

  选项来使他停止在编译上(也就是说让gcc只做预编译,编译后就不继续做下去了)

  由于gcc接受选项和文件作为操作符,它的大多数选项都是多个字母组成的

  (注:如-static选项,它是一个选项,而不是我们在一般命令中见到的由多个选项组

  合),因此我们不能将多个单一字母的选项组合在一起,如-dv选项不等于-d和-v选项的

  组合。

  你可以混合使用选项和参数,对于大多数选项来说,你不必关心你指定这些

  选项的位置,但当你多次指定同一个选项(如-I选项)时,你就需要关心他们出现的顺序

  了,这是因为这些选项通常会指导gcc从某些目录中查找一些需要的文件,而选项的

  顺序正是gcc查找目录的顺序,这也就是说,你指定在前面的选项的目录优先查找。

  下面是一些常规选项:

  [1].指定GCC进行的操作的选项

  -E :让GCC仅进行预处理后就不继续作下去了

  -S :让GCC仅进行预处理,编译后就不继续作下去了

  -c :让GCC仅进行预处理,编译,汇编后就不继续作下去了

  -o Ouput:指定输出文件,默认gcc编译输出的程序名为a.out.

  @File:让gcc执行指定文件File中的命令,该文件中每个gcc命令以空白符隔开

  [2].指定使用的C语言标准

  -std=Standard:指定标准,详细标准参考gcc手册页,你可以指定-std=c89(使用

  89年制定的C语言标准),也可以指定-std=c99(使用99年制定的C标准)

  -ansi:等价于-std=c89

  [3].控制输出信息

  -w:禁止输出所有警告信息

  -Wall:输出所有警告信息

  -Werror:将所有警告信息当成错误信息输出

  [4].调试相关选项(生成调试信息)

  -g:生成用于GDB调试程序使用的调试信息

  -p:生成用于prof程序使用的调试信息

  -pg:生成用于gprof程序使用的调试信息

  [5].程序优化选项

  -O,-O1:初步优化(会占用更多时间进行编译,但是编译后的程序运行时占用

  的内存更少)

  -O2:比-O1更进一步优化

  -O3:比-O2更进一步优化

  -O0:不进行优化

  [6].宏操作

  -D name:定义宏name的值为1,类似在源程序中使用#define name 1

  -D name=val:定义宏name的值为val,类似#define name val

  -U name:取消宏name的定义,类似#undef name

  -undef:取消所有系统指定或GCC指定的宏定义,但保留标准预定义的宏

  [7].指定搜索目录

  -I dir,-Idir:追加目录dir到头文件的搜索路径中

  -L dir,-Ldir:追加目录dir到库文件的搜索路径中

  -Bprefix:指定gcc查找库文件,头文件,数据文件的目录

  [8].指定使用的库文件,头文件

  -nostdinc:不使用标准头文件(默认在/usr/include)

  -nostdlib:不使用标准库文件(默认在/usr/lib)

  -l library:指定使用的库文件,默认gcc在编译一个程序时只连接到标准c库

  上,是用该选项能够使他连接到指定的库上,例如若你要连接到

  数学库上(libm.a)则你只须指定 -lm就可以了。也就是说这个选项

  指定连接的库文件可以将前缀lib和后缀.a(或.so)省略。

  -nostartfiles:不使用标准的系统的startup文件

  [9].指定连接库文件的方式

  -shared:动态连接到库文件上,这是默认行为。

  -static:静态连接到库文件上

  注:动态连接和静态连接的区别在于:动态连接是在程序运行时才连接到

  库文件上(也就是需要用到时才连接上),而静态连接则是在编译时就

  将程序连接到库文件中(这样做会增大程序,但便于移植)

  [10].杂项

  --sysroot=Dir:指定头文件和库文件的搜索路径的根目录。头文件搜索目录

  为Dir/usr/include,库文件的搜索目录为Dir/usr/lib,默认Dir为空

  -march=体系结构类型:详细情况参见man gcc

  -mtune=CPU类型:详细情况参见man gcc

  实例:

  cat<<"EOF">example.c

  #include

  int main(void)

  {

  int i,sum=0;

  for(i=0;i<=100;i++)

  sum+=i;

  printf("1+...+100=%d\n",sum);

  return 0;

  }

  EOF

  常规编译: gcc -o example example.c

  编译后就可以在编译目录中执行 ./example来运行程序

  优化编译: gcc -O2 -o example_1 example.c

  可以使用 time ./example和time ./example_1来比较它们的运行时间,你就会发现优化后

  程序运行时间明显短于未优化的程序

gcc的简单使用教程相关推荐

  1. 【转】正则表达式简介及在C++11中的简单使用教程

    [转]正则表达式简介及在C++11中的简单使用教程 正则表达式Regex(regular expression)是一种强大的描述字符序列的工具.在许多语言中都存在着正则表达式,C++11中也将正则表达 ...

  2. vim简单使用教程【转】

    vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...

  3. java map set_java中Map、Set、List的简单使用教程(快速入门)

    Map.Set.List List的常用方法 1.创建 List list = new ArrayList<>(); List list = new LinkedList<>( ...

  4. PHP在WPS中的应用,PHP+Laravel的简单应用教程【ajax的使用】,wps的使用教程

    PHP+Laravel的简单应用教程[ajax的使用]PHP·拉弗尔的简单应用教程[阿贾克斯的使用],下面由Laravel框架教程栏目给大家介绍PHP Laravel的简单应用教程[阿贾克斯的使用], ...

  5. 史上最简单MySQL教程详解(进阶篇)之存储过程(一)

    史上最简单MySQL教程详解(进阶篇)之存储过程(一) 史上最简单MySQL教程详解(进阶篇)之存储过程(一) 什么是存储过程 存储过程的作用 如何使用存储过程 创建存储过程 DELIMITER改变分 ...

  6. 史上最简单MySQL教程详解(进阶篇)之存储引擎介绍及默认引擎设置

    什么是存储引擎? MySQL存储引擎种类 MyISAM 引擎 InnoDB引擎 存储引擎操作 查看存储引擎 存储引擎的变更 修改默认引擎 什么是存储引擎? 与其他数据库例如Oracle 和SQL Se ...

  7. IDEA简单配置教程

    IDEA简单配置教程 --做好前期配置工作,后期少走弯路. 创建模块(Module) 设置(Settings) 设置主题 窗体及菜单字体及大小 设置编辑区主题 通过插件(plugins)更换主题 设置 ...

  8. kindle的xray怎么用_Xray简单使用教程

    Xray简单使用教程 0X00下载 xray 为单文件二进制文件,无依赖,也无需安装,下载后直接使用. 下载地址为: 注意: 不要直接 clone 仓库,xray 并不开源,仓库内不含源代码,直接下载 ...

  9. navicat fo mysql 教程_Navicat For MySQL的简单使用教程

    1.前提是必须先安装好MySQL数据库(Mac下安装MySQL数据库见前一篇) 2.安装Navicat 3.点击navicate左上角:连接->MySQL->先测链接下,如果提示连接成功, ...

最新文章

  1. Python全栈Day 15部分知识点
  2. MySQL模糊查询再也用不着 like+% 了!
  3. 网络工程师的“钱途”如何?
  4. 登录,注册,登录,登录..?
  5. 10-3 5-3 查询生产最高速度的计算机(PC或便携式电脑)厂商 (20 分)
  6. PUSHAD和POPAD,以及PUSHA和POPA
  7. 编码,charset,乱码,unicode,utf-8与net简单释义
  8. 「Luogu」[JSOI2007]字符加密 解题报告
  9. java suppliers_java8的Supplier
  10. java、sftp文件服务器的操作(获取链接。上传、下载,删除,获取图片或者文件)
  11. 一个多重阴影的DIV框框
  12. xlsx文件 wps 可以打开 excel 打不开
  13. 还原魔方的软件(十月三十日更新)
  14. 邮箱客户端 gmail支持_如何联系Gmail支持
  15. Matlab--函数与子函数
  16. 阿里巴巴的AI价值观,以及“ET大脑”战略
  17. AI生死劫,什么样的公司将被洪流吞噬?
  18. 移动硬盘某个分区打不开,显示“文件或目录损坏且无法读取”的解决方法
  19. 浏览器html5效果测试,8款浏览器对HTML5的支持测试
  20. net-java-php-python-篮球新闻网站计算机毕业设计程序

热门文章

  1. web api教程Java_WebApi项目创建CURD
  2. pywin32 获取窗口句柄_Excel VBA | 这个窗口居然关不掉
  3. linux std::queue 怎么释放内存_电脑卡慢怎么办?一个小工具帮你轻松释放内存,瞬间提升电脑性能...
  4. js 正则 长度不超过50_如何花不超过50元人民币,拍抖音网红海马体照片?
  5. 【LeetCode笔记】438. 找到字符串中所有字母异位词(Java、字符串、滑动窗口)
  6. python十点半游戏代码_Python实现Pig Latin小游戏实例代码
  7. DS系列服务器硬盘扇区,硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR)...
  8. linux rpm版本号,linux中RPM包命名规则
  9. python计算样本方差_Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算...
  10. java多次点击时事件_click事件的累加绑定,绑定一次点击事件,执行多次