gcc编译器常用选项的含义
-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用法
该选项表示禁用堆栈保护。
参考
gcc编译器常用选项的含义的更多相关文章
- gcc 编译器常用的命令行参数一览
这些常用的 gcc/g++ 命令行参数,你都知道么? 1. gcc -E source_file.c -E,只执行到预编译.直接输出预编译结果. 2. gcc -S source_file.c -S, ...
- gcc编译常用选项
我的博客:www.while0.com GDB调试: -g 生成的可执行文件才可以用gdb调试 (建议在发行版中用strip filename 来把这些调试信息去除) 开始调试. 以下是基础调试命令: ...
- gcc编译器参数
[gcc编译步骤] 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs] 3.由汇编变为目标代码(机器代码)生成.o的文件[汇编器as] 4 ...
- GCC编译器和GDB调试器常用选项
http://blog.csdn.net/u014328976/article/details/46745349 GCC编译器 gcc hello.c -o hello ...
- GCC编译命令常用选项
GCC是GUN Compiler Collection的简称,除编译程序外,还包含其他相关工具.GCC可将高级语言编写的源代码构建成计算机直接执行的二进制代码.GCC是Linux平台下最常用的编译程序 ...
- gcc/g++ 命令的常用选项
gcc/g++ 命令的常用选项使用g++编译CPP文件如果用gcc编译C++源文件时,加以下选项:-lstdc++,否则使用了C++操作的文件编译会出错.假如在程序中用到new delete操作,而不 ...
- arm-linux-gcc 常用参数讲解 gcc编译器使用方法
我们需要编译出运行在ARM平台上的代码,所使用的交叉编译器为 arm-linux-gcc.下面将arm-linux-gcc编译工具的一些常用命令参数介绍给大家.在此之前首先介绍下编译器的工作过程,在使 ...
- 第七篇:gcc和arm-linux-gcc常用选项
目录 一.gcc和arm-linux-gcc的常用选项 二.从.c文件到可执行文件过程 一.gcc和arm-linux-gcc的常用选项 常用选型 -v 查看gcc编译器的版本,显示gcc执行时的详细 ...
- GCC 编绎选项 转
gcc提供了大量的警告选项,对代码中可能存在的问题提出警告,通常可以使用-Wall来开启以下警告: -Waddress -Warray-bounds (only with -O2) ...
随机推荐
- TensorFlow 实例一(一元线性回归)
使用TensorFlow进行算法设计与训练的核心步骤: 准备数据 构建模型 训练模型 进行预测 问题描述: 通过人工数据集,随机生成一个近似采样随机分布,使得w = 2.0 ,b= 1,并加入一个噪声 ...
- Linux inode 理解
inode 硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB).操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性读取一 ...
- org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)报错
0 环境 系统环境:win10 1 正文 先检查Mapper接口与相关联xml文件是否对应,需要检查包名,namespace位置是否写对,curd时id名称等能否对应上 常规步骤: :检查mapper ...
- 24)PHP,数据库的基本知识
(1)数据库操作的基本流程: • 建立连接(认证身份) • 客户端向服务器端发送sql命令 • 服务器端执行命令,并返回执行的结果 • 客户端接收结果(并显示) • 断开连接 (2)php中操作数据库 ...
- Normal Probability Plots|outlier
6.4 Assessing Normality; Normal Probability Plots The normal probability plot is a graphical techniq ...
- VBA/VB6/VBS/VB.NET/C#/Python/PowerShell都能调用的API封装库
API函数很强大,但是声明的时候比较繁琐. 我开发的封装库,包括窗口.键盘.鼠标.消息等常用功能.用户不需要添加API函数的声明,就可以用到API的功能. 在VBA.VB6的引用对话框中引用API.t ...
- iOS漂亮的Toolbar动画、仿美团主页、简易笔记本、流失布局、标签分组等源码
iOS精选源码 JPLiquidLayout 简单易用的流式布局 labelGroupAndStreamSwift---标签分组,单选,多选 iOS采用UITableView和UIScrollView ...
- 年度Java技术盘点,懂这些技术的程序员2019发展大好
与一年前一样,Java仍然是最流行的编程语言.据TIOBE的数据显示,几十年来,Java比其他语言更常名列榜首,Java因为它拥有可移植性.可扩展性和庞大的用户社区,所以许多知名互联网公司使用Java ...
- B 小雨的三角形
题目链接:https://ac.nowcoder.com/acm/contest/949/B 思路: 一个找规律题,找到规律就很简单,只剩下代码实现了.规律:第i行去头尾剩下的数的和等于第i-1行去头 ...
- 框架之MyBatis
什么是框架,简单的来说框架就是一个程序的半成品,而我们就是的工作就是根据我们的工作需要将其完善.MyBatis框架的作用就是将我们使用JDBC操作数据库的过程移交给MyBatis,让它来帮我们完成这些 ...