gcc的选项】的更多相关文章

1.简介: gcc是gnu旗舰产品,目前基本上就是和unix捆绑在一起分发的.这个东西功能强大,但是有多达上千个选项,其用户手册也有将近一万行.虽然其中的多数选项平时很少用到.但是不管装软件还是写程序,往往都会用到gcc.下面我就gcc最最常用的几个选项做一个简要的说明,如果你想对gcc有一个全面的了解,比如你想知道在其他非x86平台上gcc是如何工作的话,你可以用命令:man gcc; gcc     [-c|-S|-E] [-std=standard] [-g] [-pg] [-Olevel…
1.简介: gcc是gnu旗舰产品,目前基本上就是和unix捆绑在一起分发的.这个东西功能强大,但是有多达上千个选项,其用户手册也有将近一万行.虽然其中的多数选项平时很少用到.但是不管装软件还是写程序,往往都会用到gcc.下面我就gcc最最常用的几个选项做一个简要的说明,如果你想对gcc有一个全面的了解,比如你想知道在其他非x86平台上gcc是如何工作的话,你可以用命令:man gcc; gcc     [-c|-S|-E] [-std=standard] [-g] [-pg] [-Olevel…
gcc options选项的优化 -c和-o都是gcc编译器的可选参数[options] -c表示只编译(compile)源文件但不链接,会把.c或.cc的c源程序编译成目标文件,一般是.o文件.[只编译不链接]-o用于指定输出(out)文件名.不用-o的话,一般会在当前文件夹下生成默认的a.out文件作为可执行程序.[指定输出文件名] -g 可执行程序包含调试信息[调试] 例如gcc -c test.c     将生成test.o的目标文件 , 产生.o文件,就是obj文件,不产生执行文件 g…
http://hi.baidu.com/xiaole10368/item/7cea9b1369cc240db88a1a5c 少优化->多优化: O0 -->> O1 -->> O2 -->> O3 -O0表示没有优化,-O1为缺省值,-O3优化级别最高 英文解析: `-O ' `-O1 '                 Optimize.      Optimizing   compilation   takes   somewhat   more   time…
gcc选项:    -c         只编译,不链接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件.    -std=     指定标准    -E         制作预处理    -o          输出的文件名    -S         产生汇编代码    -Wall      显示全部警告    -On      优化,n可以是1/2/3代表程度    -i         filename指定要包含的头文件  …
程序员是追求完美的一族,即使是一般的程序员大多也都不想看到自己的程序中有甚至那么一点点的瑕疵.遇到任意一条编译器警告都坚决不放过.有人会说:我们可以使用比编译器更加严格的静态代码检查工具,如splint. 这个建议也很不错.不过lint工具使用起来较繁琐,有时候还需要记住一些特定符号并插入到你自己的代码中才行,门槛较高,这也让很多人止步于此.那么我 们就从此放弃么?不,如今的编译器做得都很好,它可以帮助我们的找到绝大多数可能出现问题的代码,前提是你要学会控制编译器去找到这些问题代码,而熟悉编 译…
verbose的意思是冗长的,繁杂的.顾名思义,gcc --verbose 的意思就是打印出编译连接时的详细信息. 参考stackoverflow中的文章结合自己机器的信息给出分析(其实也就是翻译了一下..嘿嘿.  原址:http://stackoverflow.com/questions/13440549/gcc-verbose-mode-output-explanation) 首先给出整体信息: lysuns@ubuntu:~/APUE3/Chapter11$ gcc printids.c…
一.概念 gcc的-D选项可以定义宏,这是什么意思呢? C语言源程序中有#define定义的宏,可以起到替换.条件编译的功能:定义宏的方式是放在头文件或者C文件中.gcc提供了另外一种宏定义的方法,当然可以想象这样的宏定义方法并不是很好用,但毕竟编译器给我们提供了额外的宏定义的方法.假设程序需要很多宏,不可能这些宏都在编译器中定义,可以说比较重要的宏才会放在gcc的D选项后边. -Dname 定义宏name,默认定义内容为字符串“1” -Dname=defn 定义宏name,并且内容为defn…
我的博客:www.while0.com -fomit-frame-pointer选项是发布产品时经常会用到的优化选项,它可以优化汇编函数中用edp协助获取堆栈中函数参数的部分,不使用edp,而是通过计算,全部使用esp来完成.看下边的例子就明白了: 把一下文件保存为test.c int b(int c){ int d = c; return 0; } 通过一下命令编译: gcc -o test.s -S test.c   不优化,编译为test.s gcc -o test1.s -S -fomi…
原文网址:http://blog.csdn.net/hcx25909/article/details/7383716 程序员是追求完美的一族,即使是一般的程序员大多也都不想看到自己的程序中有甚至那么一点点的瑕疵.遇到任意一条编译器警告都坚决不放过.有人会说:我们可以使用比编译器更加严格的静态代码检查工具,如splint. 这个建议也很不错.不过lint工具使用起来较繁琐,有时候还需要记住一些特定符号并插入到你自己的代码中才行,门槛较高,这也让很多人止步于此.那么我 们就从此放弃么?不,如今的编译…
英文:https://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Optimize-Options.html#Optimize-Options 少优化->多优化: O0 -->> O1 -->> O2 -->> O3 -O0表示没有优化,-O1为缺省值,-O3优化级别最高 英文解析: `-O ' `-O1 '                 Optimize.      Optimizing   compilation   takes…
  autoconf生成的编译选项默认是"-g -O2".这个"-g"选项将我迷惑了,以为生成了GDB调试所需的信息,所以也就没有管后面的"-O2“选项.   实际上在用GDB进行调试的时候,单步跟踪代码,GDB显示的代码非常混乱.要么某些代码行未显示,要么中间插入了很多看起来像库函数的代码.甚至有时检查变量值都不对,但是根据此变量生成的后续结果却是正确的.   查看GCC文档,发现-g与-O选项虽然允许同时使用,但是会产生"surprise”的…
-g: 是一个编译选项,即在源代码编译的过程中起作用,让gcc把更多调试信息(也就包括符号信息)收集起来并将存放到最终的可执行文件内. -rdynamic:   却是一个 连接选项 ,它将指示连接器把所有符号(而不仅仅只是程序已使用到的外部符号)都添加到动态符号表(即.dynsym表)里,以便那些通过 dlopen() 或 backtrace() (这一系列函数使用.dynsym表内符号)这样的函数使用. -o: 指目标文件 -E:该选项的作用是让Gcc在预处理结束后停止编译过程. Gcc –E…
转自:http://blog.csdn.net/princess9/article/details/6567678 一般来说要现有项目中的编译选项,设置新的project的编译选项 编译器 就是将“高级语言”翻译为“机器语言(低级语言)”的程序.一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 汇编程序 (assembler) → 目标代码 (object code) → 链接器 (Linker)…
参考gcc man page 参考:http://www.cppblog.com/seman/archive/2005/11/30/1440.html gcc and g++分别是gnu的c & c++编译器, gcc/g++在执行编译工作的时候,总共需要4步 1.预处理: 生成预处理文件,后缀名 .i [预处理器cpp] 2.编译: 预处理后的文件编译生成汇编语言文件,后缀名 .s [编译器egcs] 3.汇编: 汇编语言文件 汇编 生成目标代码(机器代码)文件,后缀名.o [汇编器as] 4…
四种编译优化类型的解释: `-O ' `-O1 '                 Optimize.      Optimizing   compilation   takes   somewhat   more   time,   and   a                 lot   more   memory   for   a   large   function.                   With   `-O ',   the   compiler   tries  …
链接器把多个二进制的目标文件(object file)链接成一个单独的可执行文件.在链接过程中,它必须把符号(变量名.函数名等一些列标识符)用对应的数据的内存地址(变量地址.函数地址等)替代,以完成程序中多个模块的外部引用. 而且,链接器也必须将程序中所用到的所有C标准库函数加入其中.对于链接器而言,链接库不过是一个具有许多目标文件的集合,它们在一个文件中以方便处理. 当把程序链接到一个链接库时,只会链接程序所用到的函数的目标文件.在已编译的目标文件之外,如果创建自己的链接库,可以使用 ar 命…
如果你的程序中使用dlopen.dlsym.dlclose.dlerror 显示加载动态库,需要设置链接选项 -ldl 加载动态链接库,首先为共享库分配物理内存,然后在进程对应的页表项中建立虚拟页和物理页面之间的映射. 你可以认为系统中存在一种引用计数机制, 每当一个进程加载了共享库(在该进程的页表中进行一次映射),引用计数加一: 一个进程显式卸载(通过dlclose等)共享库或进程退出时,引用计数减 一, 当减少到0时,系统卸载共享库. (1)打开动态链接库:dlopen,函数原型void *…
1 -fno-defer-pop 函数返回的时候,就立即将栈里面放置的该函数的参数pop出来.这样可以避免函数参数占用过多的栈空间. 2 -fforward-propagate ? 3 -ffp-contract=style floating point expression contract,这个是FMA,fused multipy add 用于计算x*y + z,其中x.y.z都是浮点数.有的处理器实现了fma指令. c99里面通过提供fma函数来支持fma. fma的特点是可以使得这种模式…
gcc编译C程序的总体流程如下图 用到的命令如下: .c---> .i gcc -E hello.c .c--->.s gcc -S hello.c .c--->.o gcc -c hello.c .c--->.out gcc hello.c .o反汇编 objdump -d hello.o 下面通过一个例子演示一下 首先建立一个hello.c和一个hello.h 然后使用第一条命令  gcc -E hello.c 预处理的文件内容特别多,截图只是部分内容. 然后查看汇编程序文件 …
gcc提供了大量的警告选项,对代码中可能存在的问题提出警告,通常可以使用-Wall来开启以下警告:           -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat           -Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration           -Wcomment -Wformat -Wmain (only for C/ObjC and un…
GCC(警告.优化以及调试选项) [介绍] gcc and g++分别是gnu的c & c++编译器   gcc/g++在执行编译工作的时候,总共需要4步   1.预处理,生成.i的文件 预处理器cpp2.将预处理后的文件不转换成汇编语言,生成文件.s 编译器egcs3.有汇编变为目标代码(机器代码)生成.o的文件 汇编器as4.连接目标代码,生成可执行程序 连接器ld 1.总体选项 -E   只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里   面.   例子用法:   gcc…
参考链接 : http://blog.csdn.net/qq_31108501/article/details/51842166 gcc -D选项的作用,声明宏 参考链接:  http://blog.csdn.net/joeblackzqq/article/details/6785256 gcc  -w -W 的作用与区别 http://blog.csdn.net/m7548352/article/details/49520069…
转自:https://blog.csdn.net/qq1452008/article/details/50855810 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/QQ1452008/article/details/50855810 1. 为什么要使用后缀名为 .d 的依赖文件? 在 Makefile 中, 我们的依赖关系可能需要包含一系列的头文件. 比如 main.c 源文件内容如下: #include "stdio.h" #in…
GCC提供了大量的警告选项,对代码中可能存在的问题提出警告,通常可以使用-Wall来开启以下警告: -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration -Wcomment -Wformat -Wmain (only for C/ObjC and unless -ffreestanding) -Wmissing…
gcc 编译控制选项前面已经讲过, gcc 的基本用法是:$ gcc [选项] [文件名]gcc 有很多编译控制选项,使得 gcc 可以根据不同的参数进行不同的编译处理,可供 gcc调用的参数大约有 100 来个,但实际使用中并不会用到这么的多选项和参数.这里只介绍一些最基本和常用的控制选项以及参数,如表 10.3 所列.表 10.3 gcc 常用选项和参数 名称 功能描述 -c 只编译不链接.编译器只是将输入的.c 等源代码文件生成.o 为后缀的目标文件,通常用于编译不包含主程序的子程序文件…
gcc –E hello.c –o hello.i   使用gcc的选项"-E" 让gcc在预处理结束后停止编译过程. gcc –S hello.i –o hello.s   "-S"选项只进行编译而不进行汇编,生成汇编代码. [root@localhost gcc] gcc  hello1.c  –I  /root/workplace/gcc/  -o  hello1…
1. 为什么要使用后缀名为 .d 的依赖文件? 在 Makefile 中, 我们的依赖关系可能需要包含一系列的头文件.比如main.c 源文件内容如下: #include "stdio.h" #include "defs.h" int main(int argc, char *argv[]) { printf("Hello, %s!\n", NAME); return 0; } defs.h 头文件如下: #ifndef _DEFS_H_ #de…
1. 什么是gcc gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器.最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还支持C++.java.Pascal等语言.gcc支持多种硬件平台. 2. gcc的特点 gcc是一个可移植的编译器,支持多种硬件平台.例如ARM.X86等等. gcc不仅是个本地编译器,它还能跨平台交叉编译.所谓的本地编译器,是指编译出来的程序只能够在本地环境进行运行.而gcc编译出来的程序能够在其…
GCC仅仅意味着GNU C Compiler. gcc工作四个步骤:预处理,编译,汇编,连接. 1.预处理: 编译器将C源代码中的包含的头文件如stdio.h编译进来,用户可以使用gcc的选项"-E"进行查看.   用法:#gcc -E hello.c -o hello.i 2.编译: 在这个阶段中,Gcc首先要检查代码的规范性.是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,Gcc把代码翻译成汇编语言.用户可以使用"-S"选项来进行 查看,该选项只进行…