1,gcc与g++的问题:

1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序。

2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接。

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

当然我们可以通过指定某个选项来使它停止在某个步骤上.

指定GCC进行的操作的选项

  -E :让GCC仅进行预处理;得到 .i 文件;

  -S :让GCC仅进行预处理,编译;得到 .s 文件;

  -c :让GCC仅进行预处理,编译,汇编;得到 .o 文件;

  -o Ouput:指定输出文件,让GCC仅进行预处理,编译,汇编,连接;得到 可执行文件(默认为a.out);

控制输出信息

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

  -Wall:输出所有警告信息

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

调试相关选项(生成调试信息)

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

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

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

程序优化选项

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

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

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

  -O0:不进行优化

宏操作

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

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

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

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

指定搜索目录

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

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

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

指定使用的库文件,头文件

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

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

  -l library:指定使用的库文件,默认gcc在编译一个程序时只连接到标准c库 上,是用该选项能够使他连接到指定的库上,例如若你要连接到数学库上(libm.a)则你只须指定 -lm就可以了。也就是说这个选项指定连接的库文件可以将前缀lib和后缀.a(或.so)省略。

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

指定连接库文件的方式

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

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

  注:动态连接和静态连接的区别在于:动态连接是在程序运行时才连接到库文件上(也就是需要用到时才连接上),而静态连接则是在编译时就将程序连接到库文件中(这样做会增大程序,但便于移植)

备注:

-选项 -Wall 开启编译器几乎所有常用的警告──强烈建议你始终使用该选项。编译器有很多其他的警告选项,但 -Wall 是最常用的。默认情况下GCC 不会产生任何警告信息。当编写 C 或 C++ 程序时编译器警告非常有助于检测程序存在的问题。

参考:

http://blog.chinaunix.net/uid-27040051-id-3444056.html

http://www.ha97.com/2884.html

gcc常用指令及相关知识的更多相关文章

  1. gcc ld 链接器相关知识,调试指令(程序员的自我修养----链接、装载与库)

    最近解决一个动态链接上的问题,因为以前从来没有接触过这方面的知识,所以恶补了一下,首先要了解gcc编译指令(makefile),ld链接器的选项(还有连接脚本section指定内存位置),熟悉查看连接 ...

  2. gcc 常用指令

    gcc hello.c    直接编译默认输出 a.out可执行文件 gcc hello.c -o hello    生成名字为hello的可执行文件 gcc hello.c -o hello -Wa ...

  3. Java常用类Date相关知识

    Date:类 Date 表示特定的瞬间,精确到毫秒. 在 JDK 1.1 之前,类 Date 有两个其他的函数.它允许把日期解释为年.月.日.小时.分钟和秒值.它也允许格式化和解析日期字符串. Dat ...

  4. X86 寻址方式、AT&T 汇编语言相关知识、AT&T 与 Intel 汇编语言的比较、gcc 嵌入式汇编

    注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...

  5. redis基础:redis下载安装与配置,redis数据类型使用,redis常用指令,jedis使用,RDB和AOF持久化

    知识点梳理 课堂讲义 课程计划 1. REDIS 入 门 (了解) (操作)   2. 数据类型 (重点) (操作) (理解) 3. 常用指令   (操作)   4. Jedis (重点) (操作) ...

  6. HTML入门基础教程相关知识

    HTML入门基础教程 html是什么,什么是html通俗解答: html是hypertext markup language的缩写,即超文本标记语言.html是用于创建可从一个平台移植到另一平台的超文 ...

  7. ROS零门槛学渣教程系列(二)——Linux常用指令:mkdir、tar、 unzip、cp、scp、mv、rm、find、apt、ssh

    Linux常用指令通过上一教程,我们获得了ubuntu系统.Linux是一个很大的领域.但不要紧张,我们一步步来就是了,跟着教程,需要能用到新知识,会提前介绍给大家.下面学习几个常用的Linux指令. ...

  8. [转帖]xserver相关知识汇总

    xserver相关知识汇总 https://blog.csdn.net/QTVLC/article/details/81739984   本文主要是从以下几个方面介绍xorg-xserver 相关的知 ...

  9. CSAPP阅读笔记-gcc常用参数初探-来自第三章3.2的笔记-P113

    gcc是一种C编译器,这次我们根据书上的代码尝试着使用它. 使用之前,先补充前置知识.编译器将源代码转换为可执行代码的流程:首先,预处理器对源代码进行处理,将#define指定的宏进行替换,将#inc ...

随机推荐

  1. 阿里云实战之二(mysql+phpmyadmin)

    前文安装好了空间的基本环境,本来运行在线代码编辑器不需要php+mysql的环境,不过我还是想在后续建设里面引入会员制度,这样php+mysql的环境就必不可少了. 一.Linux下MySQL忘记ro ...

  2. poj1785 Binary Search Heap Construction

    此题可以先排序再用rmq递归解决. 当然可以用treap. http://poj.org/problem?id=1785 #include <cstdio> #include <cs ...

  3. 单链表操作B 分类: 链表 2015-06-07 12:42 15人阅读 评论(0) 收藏

    数据结构上机测试2-2:单链表操作B TimeLimit: 1000ms Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除 ...

  4. U3D刚体测试1-刚体非刚体物体非Kinematic等之间的碰撞关系

    Unity官方有一个详细的碰撞关系表:http://docs.unity3d.com/Manual/CollidersOverview.html 但其实可以精简为以下几点: 1.两个勾选kinemat ...

  5. JAVA基础知识之IO——IO流(Stream)的概念

    Java IO 流 Java将不同的设备或载体(键盘.文件.网络.管道等)的输入输出数据统称为"流"(Stream),即JAVA的IO都是基于流的. JAVA传统的所有流类型类都包 ...

  6. 【图像处理】ISP 图像传感器camera原理

    1.Color Filter Array — CFA 随着数码相机.手机的普及,CCD/CMOS 图像传感器近年来得到广泛的关注和应用. 图像传感器一般都采用一定的模式来采集图像数据,常用的有 BGR ...

  7. thinkphp隐藏中url的index.php

    在本地进行测试 1.修改apache配置文件将如下代码#去掉 #LoadModule rewrite_module modules/mod_rewrite.so   在index.php 目录下新建文 ...

  8. C++中的const详解

    const的用法,特别是用在函数后面 在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针.可以改变this所指向的值,但不能改变 this所保存的地址. 在 const ...

  9. ASCII字符表

  10. python学习笔记一 python入门(基础篇)

    简单介绍一下python2.x和3.5的区别   print   在python3.5中print 变为print() Old: print * New: print( * ) 如果想要不换行,之前的 ...