gcc的简单使用教程

前几天在学习嵌入式入门时,有一个视频中就是介绍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来比较它们的运行时间,你就会发现优化后

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SparkStreaming参数介绍

SparkStreaming参数介绍 spark.streaming.concurrentJobs :增加job并行度 可以通过集中方法为streaming job配置此参数。 - spark-default中修改 全局性修改&#xff0c;所有的streaming job都会受到影响。 - 提交streaming job是 –conf 参数添加&#xff08;推荐&#x…

还是畅通工程(克鲁斯卡尔算法+并查集)

还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 53997 Accepted Submission(s): 24504 Problem Description 某省调查乡村交通状况&#xff0c;得到的统计表中列出了任意两村庄间的距离。省政府“畅…

makefile深度学习(一个工程实例来学习 Makefile)

转自 http://www.cnblogs.com/OpenShiFt/p/4313351.html?utm_sourcetuicool&utm_mediumreferral Makefile 文件的编写 学习前的准备 需要准备的工程目录结构如下&#xff1a; . ├── add │ ├── add_float.c │ ├── add.h │ └── add_int.c ├── main…

Spark算子介绍

Spark算子 文章目录Spark算子一、转换算子coalesce函数repartition函数flatMap——flatMap变换sample——抽样zip——联结mapValues——对Value值进行变换二、行动Action算子数据运算类行动算子reduce——Reduce操作collect——收集元素countByKey——按Key值统计Key/Value型RD…

数据结构实验之二叉树六:哈夫曼编码

题目描述 字符的编码方式有多种&#xff0c;除了大家熟悉的ASCII编码&#xff0c;哈夫曼编码(Huffman Coding)也是一种编码方式&#xff0c;它是可变字长编码。该方法完全依据字符出现概率来构造出平均长度最短的编码&#xff0c;称之为最优编码。哈夫曼编码常被用于数据文件压…

hdu3790最短路径问题 (Dijkstra算法)

最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 32544 Accepted Submission(s): 9565Problem Description给你n个点&#xff0c;m条无向边&#xff0c;每条边都有长度d和花费p&#xff0c;给你起…

spark master web ui 端口8080被占用解决方法

spark master web ui 端口8080被占用解决方法 Spark master web ui 默认端口为8080&#xff0c;当系统有其它程序也在使用该接口时&#xff0c;启动master时也不会报错&#xff0c;spark自己会改用其它端口&#xff0c;自动端口号加1&#xff0c;但为了可以控制到指定的端口&a…

GDB调试工具使用教程(博客)

http://blog.csdn.net/haoel/article/details/2879

树-堆结构练习——合并果子之哈夫曼树

题目描述 在一个果园里&#xff0c;多多已经将所有的果子打了下来&#xff0c;而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并&#xff0c;多多可以把两堆果子合并到一起&#xff0c;消耗的体力等于两堆果子的重量之和。可以看出&#xff0c;…

DataFrame函数介绍

DataFrame函数 文章目录DataFrame函数DataFrame 的函数Action 操作dataframe的基本操作集成查询DataFrame 的函数 Action 操作 collect() ,返回值是一个数组&#xff0c;返回dataframe集合所有的行 collectAsList() 返回值是一个java类型的数组&#xff0c;返回dataframe集合…

GCC编译器和GDB调试器常用选项

GCC编译器 gcc hello.c -o hello #将hello.c编译成hello可执行文件 gcc -E hello.c -o hello.i #将hello.c 转换成预处理后的文件hello.igcc -S hello.c -o hello.S #将hello.c 转换成汇编文件 hello.Sgcc -c hello.c -o hello.…

树结构练习——判断给定森林中有多少棵树

题目描述 众人皆知&#xff0c;在编程领域中&#xff0c;C是一门非常重要的语言&#xff0c;不仅仅因为其强大的功能&#xff0c;还因为它是很多其他面向对象语言的祖先和典范。不过这世上几乎没什么东西是完美的&#xff0c;C也不例外&#xff0c;多继承结构在带来强大功能的同…

Spark RDD分区2G限制

Spark RDD分区2G限制 文章目录Spark RDD分区2G限制问题现象解决方法为什么2G限制个人思&#xff08;yu&#xff09;考&#xff08;jian&#xff09;问题现象 遇到这个问题时&#xff0c;spark日志会报如下的日志 片段1&#xff1a; 15/04/16 14:13:03 WARN scheduler.TaskSe…

hdu3790最短路径问题(迪杰斯特拉算法+详解+代码)

最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 32544 Accepted Submission(s): 9565Problem Description给你n个点&#xff0c;m条无向边&#xff0c;每条边都有长度d和花费p&#xff0c;给你起…

T型知识结构

传统的知识结构&#xff0c;即仅有某一专业知识的结构。这是惟一的知识结构&#xff0c;或称线性结构。这种知识结构已远远不能适应形势对管理者的要求。新型的人才知识结构通常可分为三角形、宝塔形、衣架型、T型、H型、X型等。前三个类型一般是指专业技术人才&#xff0c;在某…

priority_queueint,vectorint,greaterint优先队列,按照从小到大

原网址&#xff1a; 优先队列 C优先队列的基本使用方法 在优先队列中&#xff0c;优先级高的元素先出队列。 标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。 优先队列的第一种用法&#xff0c;也是最常用的用法&#xff1a; priority_queue<int>qi;通…

Spark stage如何划分

窄依赖和宽依赖 窄依赖&#xff1a; 指父RDD的每一个分区最多被一个子RDD的分区所用&#xff0c;表现为一个父RDD的分区对应于一个子RDD的分区&#xff0c;和两个父RDD的分区对应于一个子RDD 的分区。图中&#xff0c;map/filter和union属于第一类&#xff0c;对输入进行协同…

引出发射和什么是反射和Class类和Class实例、基本类型的字节码对象

引出发射和什么是反射 问题1: 1.对象有编译类型和运行类型Object obj new java.util.Date();编译类型: Object运行类型: java.util.Date需求:通过obj对象,调用java.util.Date类中的toLocaleString方法.obj.toLocaleString(); 此时编译报错, 编译时,会检查该编译类型中是…

GCC常用命令详解

GCC(GNU Compiler Collection)是Linux下最常用的C语言编译器&#xff0c;是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C和Object C等语言编写的程序。同时它可以通过不同的前端模块来支持各种语言&#xff0c;如Java、Fortran、Pascal、Modula-3和Ada等。穿插一个玩笑&a…

判断给定森林中有多少棵树特别版

题目描述 众人皆知&#xff0c;在编程领域中&#xff0c;C是一门非常重要的语言&#xff0c;不仅仅因为其强大的功能&#xff0c;还因为它是很多其他面向对象语言的祖先和典范。不过这世上几乎没什么东 西是完美的&#xff0c;C也不例外&#xff0c;多继承结构在带来强大功能的…