-w: 关闭编译时的警告, 也就是编译后不显示任何warning,因此有时编译中会出现一些诸如数据转换之类的可忽略警告,

-Wall: 显示编译后所有警告

-W: 显示警告,但是只是显示编译器认为的会出现错误的警告。

举例说明

对于如下程序

#include <stdio.h>

void main()
{
int a = 10;
return 0;
}

情况1: 直接编译,使用如下命令

gcc -o test test.c

结果只有一个警告

test.c: In function ‘main’:
test.c:7:2: warning: ‘return’ with a value, in function returning void [enabled by default]
return 0;

情况2: 使用-w选项编译,使用如下命令

gcc -w -o test test.c

结果没有任何的警告

情况3: 使用-Wall选项编译,使用如下命令

gcc -Wall -o test test.c

结果显示所有的警告

test.c:3:6: warning: return type of ‘main’ is not ‘int’ [-Wmain]
void main()
^
test.c: In function ‘main’:
test.c:7:2: warning: ‘return’ with a value, in function returning void [enabled by default]
return 0;
^
test.c:5:6: warning: unused variable ‘a’ [-Wunused-variable]
int a = 10;
^

情况4: 使用-W选项编译,使用如下命令

gcc -W -o test test.c

只显示了一个编译器认为会出错的警告

test.c: In function ‘main’:
test.c:7:2: warning: ‘return’ with a value, in function returning void [enabled by default]
return 0;

-I的用法

-I选项用于gcc编译器到指定的目录下查找头文件。

以下通过例子进行说明

情况1

例如,当前目录下有main.c add.c add.h三个文件

main.c的内容如下

#include <stdio.h>
#include "add.h" int main()
{
int a = 1;
int b = 2;
int c = add(a, b); printf("%d + %d is: %dn", a, b, c); return 0;
}

add.c的内容如下

int add(int x, int y)
{
return大专栏  gcc编译器常用选项的含义n> x + y;
}

add.h的内容如下

extern int add(int x, int y);

此时,在当前目录使用gcc命令进行编译

gcc -o main main.c add.

生成可执行文件main, 然后执行

./main

运行结果如下,

1 + 2 is: 3

没有任何问题, 此处gcc会在

  • 当前目录

  • /usr/include目录

  • /usr/local/include目录

下查找 add.h 文件,由于add.h文件在当前目录下, 所以一切正常。

情况2

在当前目录下新建一个inc文件夹,然后把add.h移到inc文件夹中,重新编译,会出现如下找不到add.h头文件的问题

wxer-> ls
add.c inc main.c wxer-> gcc -o main main.c add.c
main.c:2:17: fatal error: add.h: No such file or directory
#include "add.h"
^
compilation terminated.

此时要通过-I选项来指定头文件所在目录,通过如下命令进行编译,则没有问题

gcc -Iinc/ -o main main.c add.c

或者

gcc -I inc/ -o main main.c add.c

-fno-builtin与-fno-builtin-function用法

-fno-builtin 用于解决当用户自定义的函数与C语言的内建函数冲突的问题。

当用户自定义的函数与内建函数冲突时,若在gcc的编译选项中加上-fno-builtin时,则表示 不使用C语言的内建函数

对于如下场景,有些函数不想用内建函数,而其他的某些函数还是希望使用内建函数时,那么久需要使用 -fno-builtin-function 选项,其中的function就是冲突的函数名。

-m32与-m64选项用法

-m32:表示生成32位机器汇编代码

-m64:表示生成64位机器汇编代码

-g,-ggdb,-g3与-ggdb3选项用法

-g和-ggdb几乎相同,仅仅有细微的区别。

-g 产生的debug信息是OS native format的(stabs, COFF, XCOFF, or DWARF 2), GDB可以使用之。

-ggdb 产生的debug信息更倾向于给GDB使用的。

所以,如果你用的GDB调试器,那么使用-ggdb选项。如果是其他调试器,则使用-g。

3只是级别。这个级别会产生更多的额外debug信息。3这个级别可以调试宏。

-nostdinc用法

该选项表示编译器不再系统缺省的头文档目录里面找头文档,一般和-I联合使用,明确限定头文档的位置。

-fno-stack-protector用法

该选项表示禁用堆栈保护。

参考

  1. gcc中的-w -W和-Wall选项

  2. GCC编译器中的-I -L -l 选项

  3. What is the difference between gcc -ggdb and gcc -g

  4. GCC 中的编译器堆栈保护技术

  5. gdb debug 信息 stabs 格式

gcc编译器常用选项的含义的更多相关文章

  1. gcc 编译器常用的命令行参数一览

    这些常用的 gcc/g++ 命令行参数,你都知道么? 1. gcc -E source_file.c -E,只执行到预编译.直接输出预编译结果. 2. gcc -S source_file.c -S, ...

  2. gcc编译常用选项

    我的博客:www.while0.com GDB调试: -g 生成的可执行文件才可以用gdb调试 (建议在发行版中用strip filename 来把这些调试信息去除) 开始调试. 以下是基础调试命令: ...

  3. gcc编译器参数

    [gcc编译步骤] 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs] 3.由汇编变为目标代码(机器代码)生成.o的文件[汇编器as] 4 ...

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

    http://blog.csdn.net/u014328976/article/details/46745349 GCC编译器 gcc hello.c -o hello                 ...

  5. GCC编译命令常用选项

    GCC是GUN Compiler Collection的简称,除编译程序外,还包含其他相关工具.GCC可将高级语言编写的源代码构建成计算机直接执行的二进制代码.GCC是Linux平台下最常用的编译程序 ...

  6. gcc/g++ 命令的常用选项

    gcc/g++ 命令的常用选项使用g++编译CPP文件如果用gcc编译C++源文件时,加以下选项:-lstdc++,否则使用了C++操作的文件编译会出错.假如在程序中用到new delete操作,而不 ...

  7. arm-linux-gcc 常用参数讲解 gcc编译器使用方法

    我们需要编译出运行在ARM平台上的代码,所使用的交叉编译器为 arm-linux-gcc.下面将arm-linux-gcc编译工具的一些常用命令参数介绍给大家.在此之前首先介绍下编译器的工作过程,在使 ...

  8. 第七篇:gcc和arm-linux-gcc常用选项

    目录 一.gcc和arm-linux-gcc的常用选项 二.从.c文件到可执行文件过程 一.gcc和arm-linux-gcc的常用选项 常用选型 -v 查看gcc编译器的版本,显示gcc执行时的详细 ...

  9. GCC 编绎选项 转

    gcc提供了大量的警告选项,对代码中可能存在的问题提出警告,通常可以使用-Wall来开启以下警告:           -Waddress -Warray-bounds (only with -O2) ...

随机推荐

  1. goweb-访问数据库

    访问数据库 对许多Web应用程序而言,数据库都是其核心所在.数据库几乎可以用来存储你想查询和修改的任何信息,比如用户信息.产品目录或者新闻列表等. Go没有内置的驱动支持任何的数据库,但是Go定义了d ...

  2. 简述cookies 和 session

    session HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息. 1)当一个用户向服务器发送第一 ...

  3. 3.windows-oracle实战第三课 -表的管理

    oracle的核心 多表查询.存储过程.触发器  字符型: char  定义 最大2000字符,例如“char(10)  '小韩' 前4个字符放小韩,后添加6个空格补全,查询极快 varchar2(2 ...

  4. 多对多的三种创建方式-forms相关组件-钩子函数-cookie与session

    多对多的三种创建方式 1.全自动(推荐使用的**) 优势:第三张可以任意的扩展字段 缺点:ORM查询不方便,如果后续字段增加更改时不便添加修改 manyToManyField创建的第三张表属于虚拟的, ...

  5. IMX6开发板Qtopia2.2.0开发环境搭建以及编译镜像

    搭建 Qtopia2.2.0 开发环境,需要先搭建 Android 的编译环境,然后在 Android 编译环境的基础上,再搭建 Qtopia2.2.0 编译环境.以下内容基于迅为-iMX6开发板.Q ...

  6. imx6q-plus-Android6.0下uboot添加网卡驱动

    1.文件:iTOP-iMX6_android6.0.1/bootable/bootloader/uboot-imx/include/configs/mx6sabre_common.h修改如下:#def ...

  7. python_4

    1.迭代器:通过iter()方法获得了list的迭代对象,然后就可以通过next()方法来访问list中的元素了,当容器中没有可访问元素时,会抛出StopIteration异常终止迭代器 data = ...

  8. P2448 无尽的生命(树状数组+离散化)

    题目描述 逝者如斯夫,不舍昼夜! 叶良辰认为,他的寿命是无限长的,而且每天都会进步. 叶良辰的生命的第一天,他有1点能力值.第二天,有2点.第n天,就有n点.也就是S[i]=i 但是调皮的小A使用时光 ...

  9. 博客框架 Hexo: 3.9.0 及主题 NexT 6.x.x 基本操作

    文章大纲 1. 不同代码仓库部署 coding 部署方式 项目名称 配置 SSH 公钥访问 git 仓库 github 码云 2. 手动cdn,智能解析 3. 添加评论系统 4. 博客置顶 5. 页脚 ...

  10. Resin介绍及其使用配置

    Resin介绍及其使用配置一 Resin是一个提供高性能的,支持 Java/PHP 的应用服务器.目前有两个版本:一个是GPL下的开源版本,提供给一些爱好者.开发人员和低流量网站使用:一种是收费的专业 ...