cc编译器命令参考
libevent交叉编译
libevent交叉编译libevent是一个高性能事件通知库,可以用于开发网络应用程序。
本文将介绍如何在Linux环境下进行libevent的交叉编译。
步骤如下:1. 安装交叉编译工具链首先需要安装交叉编译工具链,以便编译出适用于目标平台的代码。
例如,如果要编译ARM架构的代码,需要安装ARM架构的交叉编译工具链。
2. 下载libevent源码可以从libevent的官网下载最新的源码包。
下载完成后,解压缩至本地目录。
3. 配置交叉编译环境在终端中执行以下命令:```export CC=arm-linux-gnueabi-gccexport CXX=arm-linux-gnueabi-g++export LD=arm-linux-gnueabi-ldexport AR=arm-linux-gnueabi-arexport TARGET=arm-linux-gnueabi```其中CC、CXX、LD和AR分别指定交叉编译工具链的编译器、链接器和静态库生成工具。
TARGET指定目标平台的架构。
4. 编译libevent在终端中执行以下命令:```./configure --host=$TARGET --prefix=$PWD/buildmakemake install```其中--host指定目标平台的架构,--prefix指定编译结果的安装路径。
5. 使用编译结果编译完成后,在build目录下可以找到编译出的libevent库和头文件。
将其拷贝到目标平台的相应路径下,即可在目标平台上使用libevent库。
以上就是libevent的交叉编译步骤。
需要注意的是,不同目标平台的交叉编译步骤可能会略有不同。
如果遇到问题,可以参考交叉编译工具链的文档或者libevent的官方文档。
makefile -d 用法
makefile -d 用法Makefile 文件用于构建和管理项目,指导make 工具完成自动化编译、链接和部署等工作。
下面是一个示例的Makefile 文件的用法:1. 定义变量:CC = gccCFLAGS = -Wall -Werror可以通过定义变量来设置编译器和编译选项,方便后续的使用。
2. 定义目标和规则:all: targettarget: dependencies(CC) (CFLAGS) -o target dependency_files`all` 是Makefile 的默认目标,当直接运行make 命令时,会执行all 目标下的规则。
`target` 是需要生成的目标文件,例如可执行程序等。
`dependencies` 是生成`target` 所依赖的文件,也可以是其他目标。
`(CC) (CFLAGS)` 是编译器和编译选项。
`-o target` 指定生成的目标文件名。
`dependency_files` 是`target` 的依赖文件,即需要编译的源文件。
3. 添加其他规则:例如,可以添加clean 规则用于清理生成的文件:clean:rm -f target其中`clean` 是目标名,`rm -f target` 是执行的命令,用于删除生成的`target` 文件。
4. 执行make 命令:在终端中执行`make` 命令即可根据Makefile 文件中的规则自动编译、链接和生成目标文件。
以上是Makefile 文件的一些基本用法,根据具体需求可以添加其他规则和变量。
详细使用方式可以参考GNU make 的官方文档。
GCC中文手册
GCC中文手册GCCSection: GNU Tools (1)Updated: 2003/12/05Index Return to Main ContentsNAMEgcc,g++-GNU工程的C和C++编译器(egcs-1.1.2)总览(SYNOPSIS)gcc[option|filename]...g++[option|filename]...警告(WARNING)本手册页内容摘自GNU C编译器的完整文档,仅限于解释选项的含义.除非有人自愿维护,否则本手册页不再更新.如果发现手册页和软件之间有所矛盾,请查对Info文件, Info 文件是权威文档.如果我们发觉本手册页的内容由于过时而导致明显的混乱和抱怨时,我们就停止发布它.不可能有其他选择,象更新Info文件同时更新man手册,因为其他维护GNU CC的工作没有留给我们时间做这个. GNU工程认为man手册是过时产物,应该把时间用到别的地方.如果需要完整和最新的文档,请查阅Info文件`gcc'或Using and Porting GNU CC (for version 2.0) (使用和移植GNU CC 2.0) 手册.二者均来自Texinfo原文件gcc.texinfo.描述(DESCRIPTION)C和C++编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文件: 预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking).源文件后缀名标识源文件的语言,但是对编译器来说,后缀名控制着缺省设定:gcc认为预处理后的文件(.i)是C文件,并且设定C形式的连接.g++认为预处理后的文件(.i)是C++文件,并且设定C++形式的连接.源文件后缀名指出语言种类以及后期的操作:.c C源程序;预处理,编译,汇编.C C++源程序;预处理,编译,汇编.cc C++源程序;预处理,编译,汇编.cxx C++源程序;预处理,编译,汇编.m Objective-C源程序;预处理,编译,汇编.i预处理后的C文件;编译,汇编.ii预处理后的C++文件;编译,汇编.s汇编语言源程序;汇编.S汇编语言源程序;预处理,汇编.h预处理器文件;通常不出现在命令行上其他后缀名的文件被传递给连接器(linker).通常包括:.o目标文件(Object file).a归档库文件(Archive file)除非使用了-c, -S,或-E选项(或者编译错误阻止了完整的过程),否则连接总是最后的步骤.在连接阶段中,所有对应于源程序的.o文件, -l库文件,无法识别的文件名(包括指定的.o目标文件和.a库文件)按命令行中的顺序传递给连接器.选项(OPTIONS)选项必须分立给出: `-dr'完全不同于`-d -r'.大多数`-f'和`-W'选项有两个相反的格式: -f name和-fno-name(或-W name和-Wno-name).这里只列举不是默认选项的格式.下面是所有选项的摘要,按类型分组,解释放在后面的章节中.总体选项(Overall Option)-c -S -E -o file-pipe -v -x language语言选项(Language Option)-ansi -fall-virtual -fcond-mismatch -fdollars-in-identifiers -fenum-int-equiv -fexter nal-templates -fno-asm -fno-builtin -fhosted -fno-hosted -ffreestanding -fno-free standing -fno-strict-prototype -fsigned-bitfields -fsigned-char -fthis-is-variable -fu nsigned-bitfields -funsigned-char -fwritable-strings -traditional -traditional-cpp -tr igraphs警告选项(Warning Option)-fsyntax-only -pedantic -pedantic-errors -w -W -Wall -Waggregate-return -Wcast -align -Wcast-qual -Wchar-subscript -Wcomment -Wconversion -Wenum-clash -Werror -Wformat -Wid-clash-len-Wimplicit -Wimplicit-int -Wimplicit-function-decl aration -Winline -Wlong-long -Wmain -Wmissing-prototypes -Wmissing-declaratio ns -Wnested-externs -Wno-import -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wshadow -Wstrict-prototypes -Wswitch -Wtemplate-debugg ing -Wtraditional -Wtrigraphs -Wuninitialized -Wunused -Wwrite-strings调试选项(Debugging Option)-a -d letters-fpretend-float -g -g level-gcoff -gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+ -ggdb -p -pg -save-temps -print-file-name=library-print-libgcc-file-name -print-prog-name=program优化选项(Optimization Option)-fcaller-saves -fcse-follow-jumps -fcse-skip-blocks -fdelayed-branch -felide-constr uctors -fexpensive-optimizations -ffast-math -ffloat-store -fforce-addr -fforce-me m -finline-functions -fkeep-inline-functions -fmemoize-lookups -fno-default-inline -fno-defer-pop -fno-function-cse -fno-inline -fno-peephole -fomit-frame-pointer -f rerun-cse-after-loop -fschedule-insns -fschedule-insns2 -fstrength-reduce -fthrea d-jumps -funroll-all-loops -funroll-loops -O -O2 -O3预处理器选项(Preprocessor Option)-A assertion-C -dD -dM -dN -D macro[=defn] -E -H -idirafter dir-include file-im acros file-iprefix file-iwithprefix dir-M -MD -MM -MMD -nostdinc -P -U macro-undef汇编器选项(Assembler Option)-Wa,option连接器选项(Linker Option)-l library-nostartfiles -nostdlib -static -shared -symbolic -Xlinker option-Wl,optio n-u symbol目录选项(Directory Option)-B prefix-I dir-I- -L dir目标机选项(Target Option)-b machine-V version配置相关选项(Configuration Dependent Option)M680x0 选项-m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881 -mbitfield -mc68000 -mc68020 -mfpa -mnobitfield -mrtd -mshort -msoft-floatVAX选项-mg -mgnu -munixSPARC选项-mepilogue -mfpu -mhard-float -mno-fpu -mno-epilogue -msoft-float -msparclite -mv8 -msupersparc -mcypress-margcount -mc1 -mc2 -mnoargcountAMD29K选项-m29000 -m29050 -mbw -mdw -mkernel-registers -mlarge -mnbw -mnodw -ms mall -mstack-check -muser-registersM88K选项-m88000 -m88100 -m88110 -mbig-pic -mcheck-zero-division -mhandle-large-shi ft -midentify-revision -mno-check-zero-division -mno-ocs-debug-info -mno-ocs-fr ame-position -mno-optimize-arg-area -mno-serialize-volatile -mno-underscores -mocs-debug-info -mocs-frame-position -moptimize-arg-area -mserialize-volatile -mshort-data-num-msvr3 -msvr4 -mtrap-large-shift -muse-div-instruction -mvers ion-03.00 -m warn-passed-structsRS6000选项-mfp-in-toc -mno-fop-in-tocRT选项-mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs -mfull-fp-blocks -mhc-struct-return -min-line-mul -mminimum-fp-blocks -mnohc-struct-returnMIPS选项-mcpu=cpu type-mips2 -mips3 -mint64 -mlong64 -mmips-as -mgas -mrnames -mno-rnames -mgpopt -mno-gpopt -mstats -mno-stats -mmemcpy -mno-memcp y -mno-mips-tfile -mmips-tfile -msoft-float -mhard-float -mabicalls -mno-abicalls -mhalf-pic -mno-half-pic -G num-nocppi386选项-m486 -mno-486 -msoft-float -mno-fp-ret-in-387-mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs -mno-shared-libs -mlong-ca lls -mdisable-fpregs -mdisable-indexing -mtrailing-coloni960选项-m cpu-type-mnumerics -msoft-float -mleaf-procedures -mno-leaf-procedures -m tail-call -mno-tail-call -mcomplex-addr -mno-complex-addr -mcode-align -mno-c ode-align -mic-compat -mic2.0-compat -mic3.0-compat -masm-compat -mintel-a sm -mstrict-align -mno-strict-align -mold-align -mno-old-alignDEC Alpha选项-mfp-regs -mno-fp-regs -mno-soft-float -msoft-floatSystem V选项-G -Qy -Qn -YP,paths-Ym,dir代码生成选项(Code Generation Option)-fcall-saved-reg-fcall-used-reg-ffixed-reg-finhibit-size-directive -fnonnull-object s -fno-common -fno-ident -fno-gnu-linker -fpcc-struct-return -fpic -fPIC -freg-str uct-return -fshared-data -fshort-enums -fshort-double -fvolatile -fvolatile-global -fverbose-asm总体选项(Overall Option)-x language明确指出后面输入文件的语言为language(而不是从文件名后缀得到的默认选择).这个选项应用于后面所有的输入文件,直到遇着下一个`-x'选项. language的可选值有`c', `objective-c', `c-header', `c++', `cpp-output', `assembler',和`assembler-with-cpp'. -x none关闭任何对语种的明确说明,因此依据文件名后缀处理后面的文件(就象是从未使用过`-x'选项).如果只操作四个阶段(预处理,编译,汇编,连接)中的一部分,可以使用`-x'选项(或文件名后缀)告诉gcc从哪里开始,用`-c', `-S',或`-E'选项告诉gcc到哪里结束.注意,某些选项组合(例如, `-x cpp-output -E')使gcc不作任何事情.-c编译或汇编源文件,但是不作连接.编译器输出对应于源文件的目标文件.缺省情况下, GCC通过用`.o'替换源文件名后缀`.c', `.i', `.s',等等,产生目标文件名.可以使用-o选项选择其他名字.GCC忽略-c选项后面任何无法识别的输入文件(他们不需要编译或汇编).-S编译后即停止,不进行汇编.对于每个输入的非汇编语言文件,输出文件是汇编语言文件.缺省情况下, GCC通过用`.o'替换源文件名后缀`.c', `.i',等等,产生目标文件名.可以使用-o 选项选择其他名字.GCC忽略任何不需要编译的输入文件.-E预处理后即停止,不进行编译.预处理后的代码送往标准输出.GCC忽略任何不需要预处理的输入文件.-o file指定输出文件为file.该选项不在乎GCC产生什么输出,无论是可执行文件,目标文件,汇编文件还是预处理后的C代码.由于只能指定一个输出文件,因此编译多个输入文件时,使用`-o'选项没有意义,除非输出一个可执行文件.如果没有使用`-o'选项,默认的输出结果是:可执行文件为`a.out', `source.suffix'的目标文件是`source.o',汇编文件是`source.s',而预处理后的C源代码送往标准输出.-v(在标准错误)显示执行编译阶段的命令.同时显示编译器驱动程序,预处理器,编译器的版本号.-pipe在编译过程的不同阶段间使用管道而非临时文件进行通信.这个选项在某些系统上无法工作,因为那些系统的汇编器不能从管道读取数据. GNU的汇编器没有这个问题.语言选项(LANGUAGE OPTIONS)下列选项控制编译器能够接受的C "方言":-ansi支持符合ANSI标准的C程序.这样就会关闭GNU C中某些不兼容ANSI C的特性,例如asm, inline和typeof关键字,以及诸如unix和vax这些表明当前系统类型的预定义宏.同时开启不受欢迎和极少使用的ANSI trigraph特性,以及禁止`$'成为标识符的一部分.尽管使用了`-ansi'选项,下面这些可选的关键字, __asm__, __extension__, __inline __和__typeof__仍然有效.你当然不会把他们用在ANSI C程序中,但可以把他们放在头文件里,因为编译包含这些头文件的程序时,可能会指定`-ansi'选项.另外一些预定义宏,如__unix __和__vax__,无论有没有使用`-ansi'选项,始终有效.使用`-ansi'选项不会自动拒绝编译非ANSI程序,除非增加`-pedantic'选项作为`-ansi'选项的补充.使用`-ansi'选项的时候,预处理器会预定义一个__STRICT_ANS I__宏.有些头文件关注此宏,以避免声明某些函数,或者避免定义某些宏,这些函数和宏不被ANSI标准调用;这样就不会干扰在其他地方使用这些名字的程序了.-fno-asm不把asm, inline或typeof当作关键字,因此这些词可以用做标识符.用__asm__, __inli ne__和__typeof__能够替代他们. `-ansi' 隐含声明了`-fno-asm'.-fno-builtin不接受不是两个下划线开头的内建函数(built-in function).目前受影响的函数有_exit, abort, abs, alloca, cos, exit, fabs, labs, memcmp, memcpy, sin, sqrt, strcmp, strcpy,和strlen.`-ansi'选项能够阻止alloca和_exit成为内建函数.-fhosted按宿主环境编译;他隐含声明了`-fbuiltin'选项,而且警告不正确的main函数声明.-ffreestanding按独立环境编译;他隐含声明了`-fno-builtin'选项,而且对main函数没有特别要求.(译注:宿主环境(hosted environment)下所有的标准库可用, main函数返回一个int值,典型例子是除了内核以外几乎所有的程序.对应的独立环境(freestanding environment)不存在标准库,程序入口也不一定是main,最明显的例子就是操作系统内核.详情参考gcc网站最近的资料)-fno-strict-prototype对于没有参数的函数声明,例如`int foo();',按C风格处理---即不说明参数个数或类型. (仅针对C++).正常情况下,这样的函数foo在C++中意味着参数为空.-trigraphs支持ANSI C trigraphs. `-ansi'选项隐含声明了`-trigraphs'.-traditional试图支持传统C编译器的某些方面.详见GNU C手册,我们已经把细节清单从这里删除,这样当内容过时后,人们也不会埋怨我们.除了一件事:对于C++程序(不是C), `-traditional'选项带来一个附加效应,允许对this赋值.他和`-fthis-is-variable'选项的效果一样.-traditional-cpp试图支持传统C预处理器的某些方面.特别是上面提到有关预处理器的内容,但是不包括`-tradi tional'选项的其他效应.-fdollars-in-identifiers允许在标识符(identifier)中使用`$'字符(仅针对C++).你可以指定`-fno-dollars-in-iden tifiers'选项显明禁止使用`$'符. (GNU C++在某些目标系统缺省允许`$'符,但不是所有系统.)-fenum-int-equiv允许int类型到枚举类型(enumeration)的隐式转换(仅限于C++).正常情况下GNU C++允许从enum到int的转换,反之则不行.-fexternal-templates为模板声明(template declaration)产生较小的代码(仅限于C++),方法是对于每个模板函数(template function),只在定义他们的地方生成一个副本.想要成功使用这个选项,你必须在所有使用模板的文件中,标记`#pragma implementation' (定义)或`#pragma interface ' (声明).当程序用`-fexternal-templates'编译时,模板实例(template instantiation) 全部是外部类型.你必须让需要的实例在实现文件中出现.可以通过typedef实现这一点,他引用所需的每个实例.相对应的,如果编译时使用缺省选项`-fno-external-templates',所有模板实例明确的设为内置.-fall-virtual所有可能的成员函数默认为虚函数.所有的成员函数(除了构造子函数和new或delete成员操作符)视为所在类的虚函数.这不表明每次调用成员函数都将通过内部虚函数表.有些情况下,编译器能够判断出可以直接调用某个虚函数;这时就直接调用.-fcond-mismatch允许条件表达式的第二和第三个参数的类型不匹配.这种表达式的值是void.-fthis-is-variable允许对this赋值(仅对C++).合并用户自定义的自由存储管理机制到C++后,使可赋值的`thi s'显得不合时宜.因此,默认情况下,类成员函数内部对this赋值是无效操作.然而为了向后兼容,你可以通过`-fthis-is-variable'选项使这种操作有效.-funsigned-char把char定义为无符号类型,如同unsigned char.各种机器都有自己缺省的char类型.既可能是unsigned char也可能是signed char .理想情况下,当依赖于数据的符号性时,一个可移植程序总是应该使用signed char或unsign ed char.但是许多程序已经写成只用简单的char,并且期待这是有符号数(或者无符号数,具体情况取决于编写程序的目标机器).这个选项,和它的反义选项,使那样的程序工作在对应的默认值上.char的类型始终应该明确定义为signed char或unsigned char,即使它表现的和其中之一完全一样.-fsigned-char把char定义为有符号类型,如同signed char.这个选项等同于`-fno-unsigned-char',他是the negative form of `-funsigned-char '的相反选项.同样, `-fno-signed-char'等价于`-funsigned-char'.-fsigned-bitfields-funsigned-bitfields-fno-signed-bitfields-fno-unsigned-bitfields如果没有明确声明`signed'或`unsigned'修饰符,这些选项用来定义有符号位域(bitfield)或无符号位域.缺省情况下,位域是有符号的,因为他们继承的基本整数类型,如int,是有符号数.然而,如果指定了`-traditional'选项,位域永远是无符号数.-fwritable-strings把字符串常量存储到可写数据段,而且不做特别对待.这是为了兼容一些老程序,他们假设字符串常量是可写的. `-traditional'选项也有相同效果.篡改字符串常量是一个非常糟糕的想法; ``常量''就应该是常量.预处理器选项(Preprocessor Option)下列选项针对C预处理器,预处理器用在正式编译以前,对C 源文件进行某种处理.如果指定了`-E'选项, GCC只进行预处理工作.下面的某些选项必须和`-E'选项一起才有意义,因为他们的输出结果不能用于编译.-include file在处理常规输入文件之前,首先处理文件file,其结果是,文件file的内容先得到编译. 命令行上任何`-D'和`-U'选项永远在`-include file'之前处理, 无论他们在命令行上的顺序如何.然而`-i nclude'和`-imacros'选项按书写顺序处理.-imacros file在处理常规输入文件之前,首先处理文件file,但是忽略输出结果.由于丢弃了文件file的输出内容, `-imacros file'选项的唯一效果就是使文件file中的宏定义生效, 可以用于其他输入文件.在处理`-imacros file'选项之前,预处理器首先处理`-D' 和`-U'选项,并不在乎他们在命令行上的顺序.然而`-include'和`-imacros'选项按书写顺序处理.-idirafter dir把目录dir添加到第二包含路径中.如果某个头文件在主包含路径(用`-I'添加的路径)中没有找到,预处理器就搜索第二包含路径.-iprefix prefix指定prefix作为后续`-iwithprefix'选项的前缀.-iwithprefix dir把目录添加到第二包含路径中.目录名由prefix和dir合并而成,这里prefix被先前的`-iprefix '选项指定.-nostdinc不要在标准系统目录中寻找头文件.只搜索`-I'选项指定的目录(以及当前目录,如果合适).结合使用`-nostdinc'和`-I-'选项,你可以把包含文件搜索限制在显式指定的目录.-nostdinc++不要在C++专用标准目录中寻找头文件,但是仍然搜索其他标准目录. (当建立`libg++'时使用这个选项.)-undef不要预定义任何非标准宏. (包括系统结构标志).-E仅运行C预处理器.预处理所有指定的C源文件,结果送往标准输出或指定的输出文件.-C告诉预处理器不要丢弃注释.配合`-E'选项使用.-P告诉预处理器不要产生`#line'命令.配合`-E'选项使用.-M [ -MG ]告诉预处理器输出一个适合make的规则,用于描述各目标文件的依赖关系.对于每个源文件,预处理器输出一个make规则,该规则的目标项(target)是源文件对应的目标文件名,依赖项(dep endency)是源文件中`#include引用的所有文件.生成的规则可以是单行,但如果太长,就用` \'-换行符续成多行.规则显示在标准输出,不产生预处理过的C程序.`-M'隐含了`-E'选项.`-MG'要求把缺失的头文件按存在对待,并且假定他们和源程序文件在同一目录下.必须和`-M'选项一起用.-MM [ -MG ]和`-M'选项类似,但是输出结果仅涉及用户头文件,象这样`#include file"'.忽略系统头文件如`#include <file>'.-MD和`-M'选项类似,但是把依赖信息输出在文件中,文件名通过把输出文件名末尾的`.o'替换为`.d'产生.同时继续指定的编译工作---`-MD'不象`-M'那样阻止正常的编译任务.Mach的实用工具`md'能够合并`.d'文件,产生适用于`make'命令的单一的依赖文件.-MMD和`-MD'选项类似,但是输出结果仅涉及用户头文件,忽略系统头文件.-H除了其他普通的操作, GCC显示引用过的头文件名.-A question(answer)如果预处理器做条件测试,如`#if #question(answer)',该选项可以断言(Assert) question 的答案是answer.-A-'关闭一般用于描述目标机的标准断言.-D macro定义宏macro,宏的内容定义为字符串`1'.-D macro=defn定义宏macro的内容为defn.命令行上所有的`-D'选项在`-U'选项之前处理.-U macro取消宏macro. `-U'选项在所有的`-D'选项之后处理,但是优先于任何`-include'或`-imacr os'选项.-dM告诉预处理器输出有效的宏定义列表(预处理结束时仍然有效的宏定义).该选项需结合`-E'选项使用.-dD告诉预处理器把所有的宏定义传递到输出端,按照出现的顺序显示.-dN和`-dD'选项类似,但是忽略宏的参量或内容.只在输出端显示`#define name.汇编器选项(ASSEMBLER OPTION)-Wa,option把选项option传递给汇编器.如果option含有逗号,就在逗号处分割成多个选项.连接器选项(LINKER OPTION)下面的选项用于编译器连接目标文件,输出可执行文件的时候.如果编译器不进行连接,他们就毫无意义. object-file-name如果某些文件没有特别明确的后缀a special recognized suffix, GCC就认为他们是目标文件或库文件. (根据文件内容,连接器能够区分目标文件和库文件).如果GCC执行连接操作,这些目标文件将成为连接器的输入文件.-l library连接名为library的库文件.连接器在标准搜索目录中寻找这个库文件,库文件的真正名字是`lib library.a'.连接器会当做文件名得到准确说明一样引用这个文件.搜索目录除了一些系统标准目录外,还包括用户以`-L'选项指定的路径.一般说来用这个方法找到的文件是库文件---即由目标文件组成的归档文件(archive file).连接器处理归档文件的方法是:扫描归档文件,寻找某些成员,这些成员的符号目前已被引用,不过还没有被定义.但是,如果连接器找到普通的目标文件,而不是库文件,就把这个目标文件按平常方式连接进来.指定`-l'选项和指定文件名的唯一区别是, `-l选项用`lib'和`.a'把library包裹起来,而且搜索一些目录.-lobjc这个-l选项的特殊形式用于连接Objective C程序.-nostartfiles不连接系统标准启动文件,而标准库文件仍然正常使用.-nostdlib不连接系统标准启动文件和标准库文件.只把指定的文件传递给连接器.-static在支持动态连接(dynamic linking)的系统上,阻止连接共享库.该选项在其他系统上无效.-shared生成一个共享目标文件,他可以和其他目标文件连接产生可执行文件.只有部分系统支持该选项. -symbolic建立共享目标文件的时候,把引用绑定到全局符号上.对所有无法解析的引用作出警告(除非用连接编辑选项`-Xlinker -z -Xlinker defs'取代).只有部分系统支持该选项.-Xlinker option把选项option传递给连接器.可以用他传递系统特定的连接选项, GNU CC无法识别这些选项.如果需要传递携带参数的选项,你必须使用两次`-Xlinker',一次传递选项,另一次传递他的参数.例如,如果传递`-assert definitions',你必须写成`-Xlinker -assert -Xlinker defini tions',而不能写成`-Xlinker "-assert definitions"',因为这样会把整个字符串当做一个参数传递,显然这不是连接器期待的.-Wl,option把选项option传递给连接器.如果option中含有逗号,就在逗号处分割成多个选项.-u symbol使连接器认为取消了symbol的符号定义,从而连接库模块以取得定义.你可以使用多个`-u'选项,各自跟上不同的符号,使得连接器调入附加的库模块.目录选项(DIRECTORY OPTION)下列选项指定搜索路径,用于查找头文件,库文件,或编译器的某些成员:-I dir在头文件的搜索路径列表中添加dir 目录.-I-任何在`-I-'前面用`-I'选项指定的搜索路径只适用于`#include "file"'这种情况;他们不能用来搜索`#include <file>'包含的头文件.如果用`-I'选项指定的搜索路径位于`-I-'选项后面,就可以在这些路径中搜索所有的`#includ e'指令. (一般说来-I选项就是这么用的.)还有, `-I-'选项能够阻止当前目录(存放当前输入文件的地方)成为搜索`#include "file"'的第一选择.没有办法克服`-I-'选项的这个效应.你可以指定`-I.'搜索那个目录,它在调用编译器时是当前目录.这和预处理器的默认行为不完全一样,但是结果通常令人满意.`-I-'不影响使用系统标准目录,因此, `-I-'和`-nostdinc'是不同的选项.-L dir在`-l'选项的搜索路径列表中添加dir目录.-B prefix这个选项指出在何处寻找可执行文件,库文件,以及编译器自己的数据文件.编译器驱动程序需要执行某些下面的子程序: `cpp', `cc1' (或C++的`cc1plus'), `as'和`ld'.他把prefix当作欲执行的程序的前缀,既可以包括也可以不包括`machine/version/'.对于要运行的子程序,编译器驱动程序首先试着加上`-B'前缀(如果存在).如果没有找到文件,或没有指定`-B'选项,编译器接着会试验两个标准前缀`/usr/lib/gcc/'和`/usr/local/lib /gcc-lib/'.如果仍然没能够找到所需文件,编译器就在`PATH'环境变量指定的路径中寻找没加任何前缀的文件名.如果有需要,运行时(run-time)支持文件`libgcc.a'也在`-B'前缀的搜索范围之内. 如果这里没有找到,就在上面提到的两个标准前缀中寻找,仅此而已.如果上述方法没有找到这个文件,就不连接他了.多数情况的多数机器上, `libgcc.a'并非必不可少.你可以通过环境变量GCC_EXEC_PREFIX获得近似的效果;如果定义了这个变量,其值就和上面说的一样用做前缀.如果同时指定了`-B'选项和GCC_EXEC_PREFIX变量,编译器首先使用`-B'选项,然后才尝试环境变量值.警告选项(WARNING OPTION)警告是针对程序结构的诊断信息,程序不一定有错误,而是存在风险,或者可能存在错误.下列选项控制GNU CC产生的警告的数量和类型:-fsyntax-only检查程序中的语法错误,但是不产生输出信息.-w禁止所有警告信息.-Wno-import禁止所有关于#import的警告信息.-pedantic打开完全服从ANSI C标准所需的全部警告诊断;拒绝接受采用了被禁止的语法扩展的程序.无论有没有这个选项,符合ANSI C标准的程序应该能够被正确编译(虽然极少数程序需要`-ans i' 选项).然而,如果没有这个选项,某些GNU扩展和传统C特性也得到支持.使用这个选项可以拒绝这些程序.没有理由使用这个选项,他存在只是为了满足一些书呆子(pedant).对于替选关键字(他们以`__'开始和结束) `-pedantic'不会产生警告信息. Pedantic 也不警告跟在__extension__后面的表达式.不过只应该在系统头文件中使用这种转义措施,应用程序最好避免.-pedantic-errors该选项和`-pedantic'类似,但是显示错误而不是警告.-W对下列事件显示额外的警告信息:*非易变自动变量(nonvolatile automatic variable)可能在调用longjmp时发生改变. 这些警告仅在优化编译时发生.编译器只知道对setjmp的调用,他不可能知道会在哪里调用longjmp,事实上一个信号处理例程可以在程序的任何地点调用他.其结果是,即使程序没有问题,你也可能会得到警告,因为无法在可能出现问题的地方调用longjmp.*既可以返回值,也可以不返回值的函数. (缺少结尾的函数体被看作不返回函数值)例如,下面的函数将导致这种警告:foo (a){if (a > 0)return a;}由于GNU CC不知道某些函数永不返回(含有abort和longjmp),因此有可能出现虚假警告.*表达式语句或逗号表达式的左侧没有产生作用(side effect).如果要防止这种警告,应该把未使用的表达式强制转换为void类型.例如,这样的表达式`x[i,j]'会导致警告,而`x[(void)i,j]'就不会.*无符号数用`>'或`<='和零做比较.-Wimplicit-int警告没有指定类型的声明.-Wimplicit-function-declaration警告在声明之前就使用的函数.-Wimplicit同-Wimplicit-int和-Wimplicit-function-declaration.-Wmain如果把main函数声明或定义成奇怪的类型,编译器就发出警告.典型情况下,这个函数用于外部连接, 返回int数值,不需要参数,或指定两个参数.-Wreturn-type如果函数定义了返回类型,而默认类型是int型,编译器就发出警告.同时警告那些不带返回值的r eturn语句,如果他们所属的函数并非void类型.-Wunused如果某个局部变量除了声明就没再使用,或者声明了静态函数但是没有定义,或者某条语句的运算结果显然没有使用, 编译器就发出警告.-Wswitch如果某条switch语句的参数属于枚举类型,但是没有对应的case语句使用枚举元素,编译器就发出警告. ( default语句的出现能够防止这个警告.)超出枚举范围的case语句同样会导致这个警告.-Wcomment。
交叉编译dhclient命令
交叉编译dhclient的命令取决于您所使用的操作系统和编译器。
以下是一般情况下的命令示例:
1. 下载最新的dhcp源码包。
2. 解压源码包,进入解压后的目录,输入命令:./configure。
3. 输入命令:make "CC=/usr/local/arm/
4.3.2/bin/arm-linux-gcc -static",编译后在client目录下可得到dhclient可执行文件。
4. 将client目录下的dhclient可执行文件拷贝到目标板的/bin目录下。
5. 将client目录下的dhclient.conf.5和client/scripts/linux拷贝到目标板的/sbin目录下,并将dhclient.conf.5改名为dhclient.conf,将linux脚本改名为dhclient-script。
6. 在目标板终端输入命令:dhclient wlan2,没有错误的话就成功了。
以上步骤仅供参考,具体操作以实际情况为准。
如果遇到问题,可以咨询专业人士。
C&C++ 通用 Makefile
C/C++ 通用 MakefileGeneric Makefile for C/C++ Program==================================================Keywords: Makefile, make, Generic, C/C++Author: whyglinux (whyglinux AT hotmail DOT com)Date: 2006-03-04==================================================本文提供了一个用于对 C/C++ 程序进行编译和连接以产生可执行程序的通用 Makefile。
在使用 Makefile 之前,只需对它进行一些简单的设置即可;而且一经设置,即使以后对源程序文件有所增减一般也不再需要改动 Makefile。
因此,即便是一个没有学习过 Makefile 书写规则的人,也可以为自己的 C/C++ 程序快速建立一个可工作的 Makefile。
这个 Makefile 可以在 GNU Make 和 GCC 编译器下正常工作。
但是不能保证对于其它版本的 Make 和编译器也能正常工作。
如果你发现了本文中的错误,或者对本文有什么感想或建议,可通过 whyglinux AT hotmail DOT com 邮箱和作者联系。
此 Makefile 的使用方法如下:1.程序目录的组织尽量将自己的源程序集中在一个目录中,并且把 Makefile 和源程序放在一起,这样用起来比较方便。
当然,也可以将源程序分类存放在不同的目录中。
在程序目录中创建一个名为 Makefile 的文本文件,将后面列出的 Makefile 的内容复制到这个文件中。
(注意:在复制的过程中,Makfile 中各命令前面的 Tab 字符有可能被转换成若干个空格。
这种情况下需要把 Makefile 命令前面的这些空格替换为一个 Tab。
code blocks CB项目配置基础命令
File 菜单New :新建(Empty filefile 、class 、project 、build target )。
Recent projectsfiles :最近打开的项目文件。
Import projects :Dev-C++ Project 、VC6 dswdsp 、VC8 vcprojsln 。
Ctrl+Shift+S :Save all files 。
Save workspace (as) :将多个项目组织成一个工作空间,类似VC 的dswsln 。
Properties :文件信息。
Ctrl+W :close current file (关闭当前文件)。
Ctrl+Shift+W :close all files (关闭所有打开的文件)。
Ctrl+Q :退出CodeBlocks 。
View 菜单Shift+F2 :显示隐藏左侧的Management 。
F2 :显示隐藏底端的Logs & Others 。
Edit 菜单File encoding :在状态栏有当前文件的编码格式信息。
End of line mode :注意默认为LF ('n' ),在MS 中打开需要先用相关工具(UE 或VS2005 )转换成CRLF (“rn”)。
F11 :swap headersource (切换头文件和实现文件)。
Ctrl+Shift+CToggle Comment :Comment (注释,C++ 风格:)。
Ctrl+Shift+X :Uncomment (取消注释)。
Stream Comment :块注释,C 风格:。
Ctrl+J :Auto-Complete (自动补齐关键字代码框架,例如while (); )。
Ctrl+Shift+B :括号匹配(类似VC 的Ctrl+] )。
Ctrl+Space :Complete code (完成单词),该快捷键提供输入只能提示,Ctrl+Space 与SCIM 冲突。
RVMDK
RealView®编译工具3.1 版编译器参考指南版权所有 © 2007 ARM Limited。
保留所有权利。
ARM DUI 0348ACRealView 编译工具编译器参考指南版权所有 ©2007 ARM Limited。
保留所有权利。
版本信息本手册进行了以下更改。
更改历史记录日期发行号保密性更改2007 年 3 月A非保密RVDS 3.1 版所有权声明带有®或™标记的词语和徽标是 ARM 公司的注册商标或商标。
此处提及的其他品牌和名称可能是其各自所有者的商标。
除非事先得到版权所有人的书面许可,否则不得以任何形式修改或复制本文档包含的部分或全部信息以及产品说明。
本文档描述的产品还将不断发展和完善。
ARM 公司将如实提供本文档所述产品的所有特性及其使用方法。
但是,所有暗示或明示的担保,包括但不限于对特定用途适销性或适用性的担保,均不包括在内。
本文档的目的仅在于帮助读者使用产品。
对由于使用本文档任何信息出现的遗漏、损坏或错误使用产品造成的任何损失,ARM 公司概不负责。
使用 ARM 一词时,它表示“ARM 或其任何相应的子公司”。
保密状态本文档的内容是非保密的。
根据 ARM 与 ARM 将本文档交予的参与方的协议条款,使用、复制和公开本文档内容的权利可能会受到许可限制的制约。
产品状态本文档的信息是开发的产品的最新信息。
网址ii版权所有 © 2007 ARM Limited。
保留所有权利。
ARM DUI 0348AC目录RealView编译工具编译器参考指南前言关于本手册 (vi)反馈 (x)第1章简介1.1关于 ARM 编译器 ........................................................................................1-21.2源语言模式 .................................................................................................. 1-31.3语言扩展和语言遵从性 ................................................................................1-51.4 C 和 C++ 库 ................................................................................................1-7第2章编译器命令行选项2.1命令行选项 .................................................................................................. 2-2第3章语言扩展3.1预处理程序扩展 ........................................................................................... 3-23.2C90 中提供的 C99 语言功能 .......................................................................3-53.3C++ 和 C90 中提供的 C99 语言功能 ........................................................... 3-73.4标准 C 语言扩展 ........................................................................................ 3-103.5标准 C++ 语言扩展 .................................................................................... 3-153.6标准 C 和标准 C++ 语言扩展 .................................................................... 3-193.7GNU 语言扩展 ........................................................................................... 3-25 ARM DUI 0348AC版权所有 © 2007 ARM Limited。
CC2540、BLE、蓝牙4.0、透传模块-AT指令手册
MT254xCoreS A T指令手册V2.0版本更新记录目录第1章常用指令 (5)1.1注意事项 (5)1.2A T+ ——测试 (5)1.3A T+HELP ——帮助查询 (5)1.4A T+VERS ——软件版本查询 (5)1.5A T+NAME? ——查询/设置模块名称 (6)1.6A T+RENEW ——恢复出厂设置 (6)1.7A T+RESET ——重启模块 (6)1.8A T+ROLE? ——查询/设置主从模式 (6)1.9A T+NOTI? ——查询/设置是否把当前连接状态通知给用户 (6)1.10A T+IMME? ——查询/设置模块工作方式 (6)1.11A T+START ——开始工作 (7)1.12A T+TYPE? ——查询/设置模块密码验证类型 (7)第2章串口指令 (8)2.1A T+BAUD? ——查询/设置波特率 (8)2.2A T+FLOW? ——查询/设置硬件流控 (8)2.3A T+PARI? ——查询/设置串口校验 (8)2.4A T+STOP? ——查询/设置停止位 (8)第3章从机指令 (9)3.1A T+ADVI? ——查询/设置广播时间间隔 (9)3.2A T+POWE? ——查询/设置模块发射功率 (9)3.3A T+PWRM? ——查询/设置模块自动进入休眠的时间 (9)第4章主机指令 (10)4.1A T+SCAN ——搜索可连接模块 (10)4.2A T+SHOW? ——查询/设置模块在手动搜索时是否返回名字 (10)4.3A T+CON[para1] ——连接指定蓝牙MAC地址的从模块 (10)4.4A T+CONN[para1] ——连接搜索返回的模块 (10)4.5A T+CONNL ——连接最后一次连接成功的从模块 (11)第5章连接相关指令 (12)5.1A T+ISCON ——查询当前模块是否处于连接状态 (12)5.2A T+DISCON ——断开连接 (12)5.3A T+CLEAR ——清除模块配对信息 (12)5.4A T+RADD ——查询成功连接过的远程设备地址 (12)5.5A T+SA VE? ——查询/设置模块成功连接后是否保存连接地址 (12)第6章模块信息相关指令 (13)6.1A T+PASS? ——查询/设置配对密码 (13)6.2A T+MAC ——查询本机MAC地址 (13)6.3A T+RSSI ——读取RSSI 信号值(可作为远控指令) (13)6.4A T+TEMP ——查询模块温度(可作为远控指令) (13)第7章IO监控指令 (14)7.1A T+LED? ——查询/设置LED输出状态 (14)7.2A T+PDIR? ——查询/设置PIO口的输入输出方向(可作为远控指令) (14)7.3A T+PDAT?——查询/设置PIO口的输入输出状态(可作为远控指令) (14)第8章电源管理指令 (15)8.1A T+SLEEP ——让模块进入休眠状态 (15)8.2A T+WAKE ——将模块唤醒至正常工作状态 (15)8.3A T+BA TC? ——查询/设置电量信息广播开关(可作为远控指令) (15)8.4A T+BA TT ——查询电量信息(可作为远控指令) (15)第9章模块出厂设置 (16)第1章常用指令1.1 注意事项1)所有的A T指令中的符号,如问号(?)、冒号(:),都是英文半角格式,需要携带参数para的指令必须显式地添加中括号[],指令末尾不携带”\r\n”。
gcc-搜搜百科
gcc-搜搜百科gcc摘要由GNU之⽗Stallman所开发的linux下的编译器,全称为GNU Compiler ,⽬前可以编译的语⾔包括:C, C++, , Fortran, Java, and , 可以在其官⽅页⾯找到更加详细的信息GCC是⼀个原本⽤于Unix-like系统下编程的编译器。
不过,现在GCC也有了许多下的移植版本。
这要感谢Internet上众多程序员的共同努⼒。
*Win32 下的 GCC 详细可察看词条:GCC for Win32⽬录123456⽬录12345678910GCC是GNU公社的⼀个项⽬。
是⼀个⽤于编程开发的⾃由编译器。
最初,GCC只是⼀个C语⾔编译器,他是GNU C Compiler 的英⽂缩写。
随着众多⾃由开发者的加⼊和GCC⾃⾝的发展,如今的GCC以经是⼀个包含众多语⾔的编译器了。
其中包括 C,C++,Ada,Object C和Java等。
所以,GCC也由原来的GNU C Compiler变为GNU Compiler Collection。
也就是 GNU编译器家族的意思。
当然,如今的GCC借助于他的特性,具有了交叉编译器的功能,即在⼀个平台下编译另⼀个平台的代码。
直到现在,GCC的历史仍然在继续,他的传奇仍然被⼈所传颂。
Linux系统下的Gcc(GNU C Compiler)是GNU推出的功能强⼤、性能优越的多平台编译器,是GNU的代表作品之⼀。
gcc是可以在多种硬体平台上编译出的超级编译器,其执⾏效率与⼀般的编译器相⽐平均效率要⾼20%~30%。
Gcc编译器能将C、源程序、汇程式化序和编译、连接成可执⾏⽂件,如果没有给出可执⾏⽂件的名字,gcc将⽣成⼀个名为a.out的⽂件。
在Linux系统中,可执⾏⽂件没有统⼀的后缀,系统从⽂件的属性来区分可执⾏⽂件和不可执⾏⽂件。
⽽gcc则通过后缀来区别输⼊⽂件的类别,下⾯我们来介绍gcc所遵循的部分约定规则。
.c为后缀的⽂件,C语⾔源代码⽂件;.a为后缀的⽂件,是由⽬标⽂件构成的档案库⽂件;.C,.cc或.cxx 为后缀的⽂件,是C++源代码⽂件;.h为后缀的⽂件,是程序所包含的;.i 为后缀的⽂件,是已经预处理过的C源代码⽂件;.ii为后缀的⽂件,是已经预处理过的C++源代码⽂件;.m为后缀的⽂件,是Objective-C源代码⽂件;.o为后缀的⽂件,是编译后的⽬标⽂件;.s为后缀的⽂件,是汇编语⾔源代码⽂件;.S为后缀的⽂件,是经过预编译的汇编语⾔源代码⽂件。
RedHatLinux下的python安装说明
Linux下的python下安装一.编译1.获取源代码Python-2.5.5.tar,拷贝到/users/em s目录下。
2. 解压tar xvf Python-2.5.5.tar,解压到了/users/ems/ Python-2.5.5目录下。
tar xvf Python-2.5.5.tar3.进入/users/em s/ Python-2.5.5目录,进行编译安装32位的Linux或unix$ ./configure CFLAGS=-fPIC CPPFLAGS=-fPIC或者IBM AIX (python2.7)(参见附录3)$ m ake clean$ m ake$ m ake install或$ m ake setup.py install (替换原来的python)注意:(1)configure的参数很多,以上参数在redhat上是必需的。
通过设置参数可以编译成动态库。
(2)执行m ake install时,需要root权限。
因此首先切换到root用户:$ su root在Unix下面由于安全级别高,默认的shell中,很多root用户无法找到m ake,提示“m ake :命令没有找到”,此时,root用户可以进入tcsh下执行m ake install.(3) 执行了m ake install后,python的头文件、静态库文件libpython2.5.a和可执行文件python2.5分别被拷贝到/usr/local/include/python2.5/usr/local/lib/python2.5/config/usr/local/bin在AIX上编译时,头文件pyconfig.h要使用编译目录下生成的pyconfig.h二. 替换redhat linux中默认的Python一般情况下redhat linux下系统默认已经装了python但版本是2.4.x;本次安装后在shell中输入:#python会发现显示结果:# python显示默认版本还是2.4.x的,而不是新编译安装的Python 2.5.5.解决办法为在终端输入shell命令,将默认python改为Python2.5:sudo ln -sf /usr/local/bin/python2.5 /usr/bin/python执行完成后,在终端可以输入shell命令python测试:三.PYTH ON的环境变量设置平台中的pythonengine需要在Python的头文件和库的支持。
方便快速的看到CC++代码汇编objdump英特尔语法
⽅便快速的看到CC++代码汇编objdump英特尔语法⽬录
概述
因为奇怪的考试要求,最近经常有奇怪的问题,例如
发现反编译出汇编之后,就能解释很多奇怪的问题
Objdump
⼀次意外知道了linux上⾯的objdump可以⽅便的看out⽂件的汇编代码,所以这⾥记录下来,不然每次都得查
默认
objdump -d program_name
不过默认出来的汇编语法是AT&T 语法,和常见的语法不同,看的难受,所以⬇
英特尔语法
objdump -M intel -d program_name
源代码汇编交替显⽰需要编译时带-g参数
objdump -S
最常⽤命令 intel输出源代码汇编交替显⽰解析C++符号(垃圾C++反编译⼀坨翔/(ㄒoㄒ)/~~ )
objdump -M intel -S -C -d a.out
所有参数
-d:将代码段反汇编
-S:将代码段反汇编的同时,将反汇编代码和源代码交替显⽰,编译时需要给出-g,即需要调试信息。
-C:将C++符号名逆向解析。
-l:反汇编代码中插⼊源代码的⽂件名和⾏号。
-j section:仅反汇编指定的section。
可以有多个-j参数来选择多个section。
其他的
也许有时候windows还有linux编译器实现不⼀样也可能
参考⾃:。
【原+转】用CMake代替makefile进行跨平台交叉编译
【原+转】⽤CMake代替makefile进⾏跨平台交叉编译 在开始介绍如何使⽤CMake编译跨平台的静态库之前,先讲讲我在没有使⽤CMake之前所趟过的坑。
因为很多开源的程序,⽐如png,都是⾃带编译脚本的。
我们可以使⽤下列脚本来进⾏编译:./configure --prefix=/xxx/xx --enable-static=YESmakemake install 相信⼿动在类Unix系统上⾯编译过开源程序的同学对上⾯的命令肯定⾮常熟悉。
更悲惨的是,有些开源库是不提供configure配置⽂件的,只有⼀个Makefile或者Makefile.gcc。
我的体会是,Makefile是⼀个很复杂的东西,没有⼀定的积累我们是看不懂的,更别说去修改它了。
⽽本⽂的CMake可以更傻⽠更简单地达到我们的⽬的,你不需要理会复杂的makefile语法。
Just follow me! 如果不配置编译器和⼀些编译、链接参数,这样的操作,最后编译出来的静态库只能在本系统上⾯被链接使⽤。
⽐如你在mac上⾯运⾏上⾯的命令,编译出来的静态库就只能给mac程序链接使⽤。
如果在Linux上⾯运⾏上述命令,则也只能给Linux上⾯的程序所链接使⽤。
如果我们想要在Mac上⾯编译出ios和android的静态库,就必须要⽤到交叉编译。
要进⾏交叉编译,⼀般来说要指定⽬标编译平台的编译器,通常是指定⼀个CC环境变量,根据编译的是c库还是c++库,要分别指定C_flags和CXX_flag,当然还需要指定c/c++和系统sdk的头⽂件包含路径。
总之,⾮常之繁琐。
为什么要使⽤CMake 为什么我们不使⽤autoconf?为什么我们不使⽤QMake,JAM,ANT呢?具体原因⼤家可以参考我在本⽂最后的参考链接⾥⾯的⼀书的第⼀章。
我⾃⼰使⽤CMake的感受就是:我原来编写bash,配置configure参数,读各个开源库的INSTALL⽂件(因为不同库的configure参数有差别),配置各种编译flag,头⽂件包含等。
cc的基本用法Windows系统-电脑资料
cc的基本用法Windows系统-电脑资料[cc的基本用法] 在UNIX系统中,实现C源程序到可执行文件的这一转换过程的工具是cc,。
在大多数系统中cc实际上是一个shell 命令文件。
有些系统中的C编译程序可能并不叫cc而是其它的一个什么名称,如Sun工作站上常用的gcc等等。
但这些都无关紧要。
大多数系统中C编[cc的基本用法]在UNIX系统中,实现C源程序到可执行文件的这一转换过程的工具是cc。
在大多数系统中cc实际上是一个shell命令文件。
有些系统中的C编译程序可能并不叫cc而是其它的一个什么名称,如Sun工作站上常用的gcc等等。
但这些都无关紧要。
大多数系统中C编译命令的用法基本上都是类似的。
我们这里介绍的将以SVR4上的C编译系统为基础。
cc基本用法一般我们只需要将C源程序的名字写在CC命令行中,cc即可对这些源文件(.c文件)进行编译。
如果这些源文件中都没有main()函数的定义,那么cc将只能生成与各源文件相对应的目标文件(.o文件)。
如果某个源文件中有关于main()函数的定义,则将把所有目标文件链接起来生成相应的可执行文件。
缺省的情况下这个可执行文件的名字将是a.out。
例如,假定myprog.c是一个包含有main()函数定义的C语言程序文件,其中代码如下:/********************************************** An example source code with errors ** Name:myprog.c ********************************************** /#include#include# define TESTOK ?1int TestInput(char * ValuInput){while (* ValueInput)if (! isdigit(* ValueInput ) return (! TESTOK);else ValueInput + +;return ((100/atoi(ValueInput))? TESTOK:! TESTOK);}voidmain(int argc,char * argv[]){int i;for (i=1;iif(TestInput (argv[i]) = =TESTOK)printf("The %dth value '%s' \tis OK! \n",i,argv[i]);elseprintf("The %dth value '%s' \tis BAD! \n" ,i,argv[i]);}对于此程序中的错误(设计错误)我们暂不理会。
GCC 中文手册
GCC 中文手册- -作者:徐明 文章来源:不详GCCSection: GNU Tools (1)警告(WARNING)本手册页内容摘自GNU C编译器的完整文档,仅限于解释选项的含义.除非有人自愿维护,否则本手册页不再更新.如果发现手册页和软件之间有所矛盾,请查对Info文件, Info文件是权威文档.如果我们发觉本手册页的内容由于过时而导致明显的混乱和抱怨时,我们就停止发布它.不可能有其他选择,象更新Info文件同时更新man手册,因为其他维护GNU CC的工作没有留给我们时间做这个. GNU工程认为man手册是过时产物,应该把时间用到别的地方.如果需要完整和最新的文档,请查阅Info文件`gcc'或Using and Porting GNU CC (for version 2.0) (使用和移植GNU CC 2.0) 手册.二者均来自Texinfo原文件 gcc.texinfo.描述(DESCRIPTION)C 和C++编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文件: 预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking).源文件后缀名标识源文件的语言,但是对编译器来说,后缀名控制着缺省设定: gcc认为预处理后的文件(.i)是C文件,并且设定C形式的连接.g++认为预处理后的文件(.i)是C++文件,并且设定C++形式的连接.源文件后缀名指出语言种类以及后期的操作:.c C源程序;预处理,编译,汇编.C C++源程序;预处理,编译,汇编.cc C++源程序;预处理,编译,汇编.cxx C++源程序;预处理,编译,汇编.m Objective-C源程序;预处理,编译,汇编.i 预处理后的C文件;编译,汇编.ii 预处理后的C++文件;编译,汇编.s 汇编语言源程序;汇编.S 汇编语言源程序;预处理,汇编.h 预处理器文件;通常不出现在命令行上其他后缀名的文件被传递给连接器(linker).通常包括:.o 目标文件(Object file).a 归档库文件(Archive file)除非使用了-c, -S,或-E选项(或者编译错误阻止了完整的过程),否则连接总是 最后的步骤.在连接阶段中,所有对应于源程序的.o文件, -l库文件,无法识别的文件名(包括指定的 .o目标文件和.a库文件)按命令行中的顺序传递给连接器.选项(OPTIONS)选项必须分立给出: `-dr'完全不同于`-d -r '.大多数`-f'和`-W'选项有两个相反的格式: -fname和 -fno-name (或-Wname和-Wno-name).这里 只列举不是默认选项的格式.下面是所有选项的摘要,按类型分组,解释放在后面的章节中.总体选项(Overall Option)-c -S -E -o file -pipe -v -x language语言选项(Language Option)-ansi -fall-virtual -fcond-mismatch -fdollars-in-identifiers-fenum-int-equiv -fexternal-templates -fno-asm -fno-builtin -fhosted -fno-hosted -ffreestanding -fno-freestanding -fno-strict-prototype-fsigned-bitfields -fsigned-char -fthis-is-variable-funsigned-bitfields -funsigned-char -fwritable-strings -traditional -traditional-cpp -trigraphs警告选项(Warning Option)-fsyntax-only -pedantic -pedantic-errors -w -W -Wall -Waggregate-return -Wcast-align -Wcast-qual -Wchar-subscript -Wcomment -Wconversion-Wenum-clash -Werror -Wformat -Wid-clash-len -Wimplicit -Wimplicit-int -Wimplicit-function-declaration -Winline -Wlong-long -Wmain-Wmissing-prototypes -Wmissing-declarations -Wnested-externs-Wno-import -Wparentheses -Wpointer-arith -Wredundant-decls-Wreturn-type -Wshadow -Wstrict-prototypes -Wswitch-Wtemplate-debugging -Wtraditional -Wtrigraphs -Wuninitialized -Wunused -Wwrite-strings调试选项(Debugging Option)-a -dletters -fpretend-float -g -glevel -gcoff -gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+ -ggdb -p -pg -save-temps-print-file-name=library -print-libgcc-file-name-print-prog-name=program优化选项(Optimization Option)-fcaller-saves -fcse-follow-jumps -fcse-skip-blocks -fdelayed-branch -felide-constructors -fexpensive-optimizations -ffast-math-ffloat-store -fforce-addr -fforce-mem -finline-functions-fkeep-inline-functions -fmemoize-lookups -fno-default-inline-fno-defer-pop -fno-function-cse -fno-inline -fno-peephole-fomit-frame-pointer -frerun-cse-after-loop -fschedule-insns-fschedule-insns2 -fstrength-reduce -fthread-jumps -funroll-all-loops -funroll-loops -O -O2 -O3预处理器选项(Preprocessor Option)-Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H -idirafter dir -include file -imacros file -iprefix file -iwithprefix dir -M -MD -MM -MMD-nostdinc -P -Umacro -undef汇编器选项(Assembler Option)-Wa,option连接器选项(Linker Option)-llibrary -nostartfiles -nostdlib -static -shared -symbolic -Xlinker option -Wl,option -u symbol目录选项(Directory Option)-Bprefix -Idir -I- -Ldir目标机选项(Target Option)-b machine -V version配置相关选项(Configuration Dependent Option)M680x0 选项-m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881 -mbitfield -mc68000 -mc68020 -mfpa -mnobitfield -mrtd -mshort -msoft-floatVAX选项-mg -mgnu -munixSPARC选项-mepilogue -mfpu -mhard-float -mno-fpu -mno-epilogue -msoft-float-msparclite -mv8 -msupersparc -mcypressConvex选项-margcount -mc1 -mc2 -mnoargcountAMD29K选项-m29000 -m29050 -mbw -mdw -mkernel-registers -mlarge -mnbw -mnodw -msmall -mstack-check -muser-registersM88K选项-m88000 -m88100 -m88110 -mbig-pic -mcheck-zero-division-mhandle-large-shift -midentify-revision -mno-check-zero-division-mno-ocs-debug-info -mno-ocs-frame-position -mno-optimize-arg-area-mno-serialize-volatile -mno-underscores -mocs-debug-info-mocs-frame-position -moptimize-arg-area -mserialize-volatile-mshort-data-num -msvr3 -msvr4 -mtrap-large-shift -muse-div-instruction -mversion-03.00 -mwarn-passed-structsRS6000选项-mfp-in-toc -mno-fop-in-tocRT选项-mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs -mfull-fp-blocks -mhc-struct-return -min-line-mul -mminimum-fp-blocks-mnohc-struct-returnMIPS选项-mcpu=cpu type -mips2 -mips3 -mint64 -mlong64 -mmips-as -mgas -mrnames -mno-rnames -mgpopt -mno-gpopt -mstats -mno-stats -mmemcpy -mno-memcpy -mno-mips-tfile -mmips-tfile -msoft-float -mhard-float -mabicalls-mno-abicalls -mhalf-pic -mno-half-pic -G num -nocppi386选项-m486 -mno-486 -msoft-float -mno-fp-ret-in-387HPPA选项-mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs -mno-shared-libs-mlong-calls -mdisable-fpregs -mdisable-indexing -mtrailing-coloni960选项-mcpu-type -mnumerics -msoft-float -mleaf-procedures-mno-leaf-procedures -mtail-call -mno-tail-call -mcomplex-addr-mno-complex-addr -mcode-align -mno-code-align -mic-compat-mic2.0-compat -mic3.0-compat -masm-compat -mintel-asm -mstrict-align -mno-strict-align -mold-align -mno-old-alignDEC Alpha选项-mfp-regs -mno-fp-regs -mno-soft-float -msoft-floatSystem V选项-G -Qy -Qn -YP,paths -Ym,dir代码生成选项(Code Generation Option)-fcall-saved-reg -fcall-used-reg -ffixed-reg -finhibit-size-directive -fnonnull-objects -fno-common -fno-ident -fno-gnu-linker-fpcc-struct-return -fpic -fPIC -freg-struct-return -fshared-data-fshort-enums -fshort-double -fvolatile -fvolatile-global -fverbose-asm总体选项(Overall Option)-x language明确指出后面输入文件的语言为language (而不是从文件名后缀得到的默认选择).这个选项应用于后面所有的输入文件,直到遇着下一个`-x'选项. language 的可选值有`c', `objective-c', `c-header', `c++', `cpp-output',`assembler',和`assembler-with-cpp'.-x none关闭任何对语种的明确说明,因此依据文件名后缀处理后面的文件(就象是从未使用过`-x'选项).如果只操作四个阶段(预处理,编译,汇编,连接)中的一部分,可以使用`-x'选项(或文件名后缀)告诉 gcc从哪里开始,用`-c', `-S',或`-E'选项告诉gcc到 哪里结束.注意,某些选项组合(例如, `-x cpp-output -E')使gcc不作任何事情.-c编译或汇编源文件,但是不作连接.编译器输出对应于源文件的目标文件.缺省情况下, GCC通过用`.o'替换源文件名后缀`.c', `.i', `.s',等等,产生目标文件名.可以使用-o选项选择其他名字.GCC忽略-c选项后面任何无法识别的输入文件(他们不需要编译或汇编).-S编译后即停止,不进行汇编.对于每个输入的非汇编语言文件,输出文件是汇编语言文件.缺省情况下, GCC通过用`.o'替换源文件名后缀`.c', `.i',等等,产生 目标文件名.可以使用-o选项选择其他名字.GCC忽略任何不需要编译的输入文件.-E预处理后即停止,不进行编译.预处理后的代码送往标准输出.GCC忽略任何不需要预处理的输入文件.-o file指定输出文件为file.该选项不在乎GCC产生什么输出,无论是可执行文件,目标文件,汇编文件还是 预处理后的C代码.由于只能指定一个输出文件,因此编译多个输入文件时,使用`-o'选项没有意义,除非输出一个可执行文件.如果没有使用`-o'选项,默认的输出结果是:可执行文件为`a.out',`source.suffix '的目标文件是`source.o',汇编文件是 `source.s',而预处理后的C源代码送往标准输出.-v(在标准错误)显示执行编译阶段的命令.同时显示编译器驱动程序,预处理器,编译器的版本号.-pipe在编译过程的不同阶段间使用管道而非临时文件进行通信.这个选项在某些系统上无法工作,因为那些系统的 汇编器不能从管道读取数据. GNU的汇编器没有这个问题.语言选项(LANGUAGE OPTIONS)下列选项控制编译器能够接受的C "方言":-ansi支持符合ANSI标准的C程序.这样就会关闭GNU C中某些不兼容ANSI C的特性,例如asm, inline和 typeof 关键字,以及诸如unix和vax这些表明当前系统类型的预定义宏.同时开启 不受欢迎和极少使用的ANSI trigraph特性,以及禁止`$'成为标识符的一部分.尽管使用了`-ansi'选项,下面这些可选的关键字, __asm__, __extension__, __inline__和__typeof__仍然有效.你当然不会把 他们用在ANSI C程序中,但可以把他们放在头文件里,因为编译包含这些头文件的程序时,可能会指定`-ansi'选项.另外一些预定义宏,如__unix__和__vax__,无论有没有使用`-ansi'选项,始终有效.使用`-ansi'选项不会自动拒绝编译非ANSI程序,除非增加`-pedantic'选项作为 `-ansi'选项的补充.使用`-ansi'选项的时候,预处理器会预定义一个__STRICT_ANSI__宏.有些头文件 关注此宏,以避免声明某些函数,或者避免定义某些宏,这些函数和宏不被ANSI标准调用;这样就不会干扰在其他地方 使用这些名字的程序了.-fno-asm不把asm, inline或typeof当作关键字,因此这些词可以用做标识符.用__asm__, __inline__和__typeof__能够替代他们. `-ansi' 隐含声明了`-fno-asm'.-fno-builtin不接受不是两个下划线开头的内建函数(built-in function).目前受影响的函数有_exit, abort, abs, alloca, cos, exit, fabs, labs, memcmp, memcpy, sin, sqrt, strcmp, strcpy,和strlen.`-ansi'选项能够阻止alloca和_exit成为内建函数.-fhosted按宿主环境编译;他隐含声明了`-fbuiltin'选项,而且警告不正确的main函数声明.-ffreestanding按独立环境编译;他隐含声明了`-fno-builtin'选项,而且对main函数没有特别要求.(译注:宿主环境(hosted environment)下所有的标准库可用, main函数返回一个int值,典型例子是除了内核以外几乎所有的程序.对应的独立环境(freestanding environment)不存在标准库,程序入口也不一定是 main,最明显的例子就是操作系统内核.详情参考gcc网站最近的资料)-fno-strict-prototype对于没有参数的函数声明,例如`int foo ();',按C风格处理---即不说明参数个数或类型. (仅针对C++).正常情况下,这样的函数foo在C++中意味着参数为空.-trigraphs支持ANSI C trigraphs. `-ansi'选项隐含声明了`-trigraphs'.-traditional试图支持传统C编译器的某些方面.详见GNU C手册,我们已经把细节清单从这里删除,这样当内容过时后,人们也不会 埋怨我们.除了一件事:对于C++程序(不是C), `-traditional'选项带来一个附加效应,允许对 this赋值.他和`-fthis-is-variable'选项的效果一样.-traditional-cpp试图支持传统C预处理器的某些方面.特别是上面提到有关预处理器的内容,但是不包括 `-traditional'选项的其他效应.-fdollars-in-identifiers允许在标识符(identifier)中使用`$'字符(仅针对C++).你可以指定`-fno-dollars-in-identifiers'选项显明禁止使用`$'符. (GNU C++在某些 目标系统缺省允许`$'符,但不是所有系统.)-fenum-int-equiv允许int类型到枚举类型(enumeration)的隐式转换(仅限于C++).正常情况下GNU C++允许从 enum到int的转换,反之则不行.-fexternal-templates为模板声明(template declaration)产生较小的代码(仅限于C++),方法是对于每个模板函数 (template function),只在定义他们的地方生成一个副本.想要成功使用这个选项,你必须在所有使用模板的 文件中,标记`#pragma implementation' (定义)或`#pragma interface' (声明).当程序用`-fexternal- templates'编译时,模板实例(template instantiation) 全部是外部类型.你必须让需要的实例在实现文件中出现.可以通过typedef实现这一点,他引用所需的每个实例.相对应的,如果编译时使用缺省选项`-fno-external-templates',所有模板实例明确的设为内置.-fall-virtual所有可能的成员函数默认为虚函数.所有的成员函数(除了构造子函数和new或delete 成员操作符)视为所在类的虚函数.这不表明每次调用成员函数都将通过内部虚函数表.有些情况下,编译器能够判断出可以直接调用某个虚函数;这时就 直接调用.-fcond-mismatch允许条件表达式的第二和第三个参数的类型不匹配.这种表达式的值是void.-fthis-is-variable允许对this赋值(仅对C++).合并用户自定义的自由存储管理机制到C++后,使可赋值的 `this'显得不合时宜.因此,默认情况下,类成员函数内部对this赋值是无效操作.然而为了向后兼容,你可以通过`-fthis-is-variable'选项使这种操作有效.-funsigned-char把char定义为无符号类型,如同unsigned char.各种机器都有自己缺省的char类型.既可能是unsigned char也可能是signed char .理想情况下,当依赖于数据的符号性时,一个可移植程序总是应该使用signed char或unsigned char.但是许多程序已经写成只用简单的char,并且期待这是有符号数(或者无符号数,具体情况取决于编写程序的目标机器).这个选项,和它的反义选项,使那样的程序工作在对应的默认值上.char的类型始终应该明确定义为signed char或unsigned char,即使 它表现的和其中之一完全一样.-fsigned-char把char定义为有符号类型,如同signed char.这个选项等同于`-fno-unsigned-char',他是the negative form of`-funsigned-char'的相反选项.同样, `-fno-signed-char'等价于`-funsigned-char'.-fsigned-bitfields-funsigned-bitfields-fno-signed-bitfields-fno-unsigned-bitfields如果没有明确声明`signed'或`unsigned'修饰符,这些选项用来定义有符号位域 (bitfield)或无符号位域.缺省情况下,位域是有符号的,因为他们继承的基本整数类型,如int,是 有符号数.然而,如果指定了`-traditional'选项,位域永远是无符号数.-fwritable-strings把字符串常量存储到可写数据段,而且不做特别对待.这是为了兼容一些老程序,他们假设字符串常量是可写的. `-traditional'选项也有相同效果.篡改字符串常量是一个非常糟糕的想法; ``常量''就应该是常量.预处理器选项(Preprocessor Option)下列选项针对C预处理器,预处理器用在正式编译以前,对C 源文件进行某种处理.如果指定了`-E'选项, GCC只进行预处理工作.下面的某些选项必须和`-E'选项一起才 有意义,因为他们的输出结果不能用于编译.-include file在处理常规输入文件之前,首先处理文件file,其结果是,文件file的内容先得到编译. 命令行上任何`-D'和`-U'选项永远在`-include file'之前处理, 无论他们在命令行上的顺序如何.然而`-include'和`-imacros'选项按书写顺序处理.-imacros file在处理常规输入文件之前,首先处理文件file,但是忽略输出结果.由于丢弃了文件file的 输出内容, `-imacros file'选项的唯一效果就是使文件file中的宏定义生效, 可以用于其他输入文件.在处理`-imacrosfile'选项之前,预处理器首先处理`-D' 和`-U'选项,并不在乎他们在命令行上的顺序.然而`-include'和 `-imacros'选项按书写顺序处理.-idirafter dir把目录dir添加到第二包含路径中.如果某个头文件在主包含路径(用`-I'添加的路径)中没有 找到,预处理器就搜索第二包含路径.-iprefix prefix指定prefix作为后续`-iwithprefix'选项的前缀.-iwithprefix dir把目录添加到第二包含路径中.目录名由prefix和dir合并而成,这里 prefix 被先前的`-iprefix'选项指定.-nostdinc不要在标准系统目录中寻找头文件.只搜索`-I'选项指定的目录(以及当前目录,如果合适).结合使用`-nostdinc'和`-I-'选项,你可以把包含文件搜索限制在显式指定的目录.-nostdinc++不要在C++专用标准目录中寻找头文件,但是仍然搜索其他标准目录. (当建立`libg++'时使用 这个选项.)-undef不要预定义任何非标准宏. (包括系统结构标志).-E仅运行C预处理器.预处理所有指定的C源文件,结果送往标准输出或指定的输出文件.-C告诉预处理器不要丢弃注释.配合`-E'选项使用.-P告诉预处理器不要产生`#line'命令.配合`-E'选项使用.-M [ -MG ]告诉预处理器输出一个适合make的规则,用于描述各目标文件的依赖关系.对于每个源文件,预处理器输出一个make规则,该规则的目标项(target)是源文件对应的目标文件名,依赖项(dependency)是源文件中 `#include引用的所有文件.生成的规则可以是单行,但如果太长,就用`\'-换行符续成多行.规则 显示在标准输出,不产生预处理过的C程序.`-M'隐含了`-E'选项.`-MG'要求把缺失的头文件按存在对待,并且假定他们和源程序文件在同一目录下.必须和 `-M'选项一起用.-MM [ -MG ]和`-M'选项类似,但是输出结果仅涉及用户头文件,象这样`#include file"'.忽略系统头文件如`#include <file>'.-MD和`-M'选项类似,但是把依赖信息输出在文件中,文件名通过把输出文件名末尾的`.o'替换为 `.d'产生.同时继续指定的编译工作---`-MD'不象`-M'那样阻止正常的编译任务.Mach的实用工具`md'能够合并`.d'文件,产生适用于`make'命令的单一的 依赖文件.-MMD和`-MD'选项类似,但是输出结果仅涉及用户头文件,忽略系统头文件.-H除了其他普通的操作, GCC显示引用过的头文件名.-Aquestion(answer)如果预处理器做条件测试,如`#if #question(answer)',该选项可以断言(Assert) question的答案是answer. -A-'关闭一般用于描述目标机的标准断言.-Dmacro定义宏macro,宏的内容定义为字符串`1'.-Dmacro=defn定义宏macro的内容为defn.命令行上所有的`-D'选项在 `-U'选项之前处理.-Umacro取消宏macro. `-U'选项在所有的`-D'选项之后处理,但是优先于任何`-include'或`-imacros'选项.-dM告诉预处理器输出有效的宏定义列表(预处理结束时仍然有效的宏定义).该选项需结合`-E'选项使用.-dD告诉预处理器把所有的宏定义传递到输出端,按照出现的顺序显示.-dN和`-dD'选项类似,但是忽略宏的参量或内容.只在输出端显示`#define name.汇编器选项(ASSEMBLER OPTION)-Wa,option把选项option传递给汇编器.如果option含有逗号,就在逗号处分割成多个选项.连接器选项(LINKER OPTION)下面的选项用于编译器连接目标文件,输出可执行文件的时候.如果编译器不进行 连接,他们就毫无意义.object-file-name如果某些文件没有特别明确的后缀a special recognized suffix, GCC就认为他们是目标文件或库文件. (根据文件内容,连接器能够区分目标文件和库文件).如果GCC执行连接操作,这些目标文件将成为连接器的输入文件.-llibrary连接名为library的库文件.连接器在标准搜索目录中寻找这个库文件,库文件的真正名字是`liblibrary.a'.连接器会 当做文件名得到准确说明一样引用这个文件.搜索目录除了一些系统标准目录外,还包括用户以`-L'选项指定的路径.一般说来用这个方法找到的文件是库文件---即由目标文件组成的归档文件(archive file).连接器处理归档文件的方法是:扫描归档文件,寻找某些成员,这些成员的符号目前已被引用,不过还没有被定义.但是,如果连接器找到普通的目标文件,而不是库文件,就把这个目标文件按平常方式连接进来.指定`-l'选项和指定文件名的唯一区别是, `-l选项用`lib'和`.a'把library包裹起来,而且搜索一些目录.-lobjc这个-l选项的特殊形式用于连接Objective C程序.-nostartfiles不连接系统标准启动文件,而标准库文件仍然正常使用.-nostdlib不连接系统标准启动文件和标准库文件.只把指定的文件传递给连接器.-static在支持动态连接(dynamic linking)的系统上,阻止连接共享库.该选项在其他系统上无效.-shared生成一个共享目标文件,他可以和其他目标文件连接产生可执行文件.只有部分系统支持该选项.-symbolic建立共享目标文件的时候,把引用绑定到全局符号上.对所有无法解析的引用作出警告(除非用连接编辑选项 `-Xlinker -z -Xlinker defs'取代).只有部分系统支持该选项.-Xlinker option把选项option传递给连接器.可以用他传递系统特定的连接选项, GNU CC无法识别这些选项.如果需要传递携带参数的选项,你必须使用两次`-Xlinker',一次传递选项,另一次传递他的参数. 例如,如果传递`-assert definitions',你必须写成`-Xlinker -assert -Xlinker definitions',而不能写成`-Xlinker "-assert definitions"',因为这样会把整个字符串当做一个参数传递,显然这不是连接器期待的.-Wl,option把选项option传递给连接器.如果option中含有逗号,就在逗号处分割成多个选项.-u symbol使连接器认为取消了symbol的符号定义,从而连接库模块以取得定义.你可以使用多个 `-u'选项,各自跟上不同的符号,使得连接器调入附加的库模块.目录选项(DIRECTORY OPTION)下列选项指定搜索路径,用于查找头文件,库文件,或编译器的某些成员:-Idir在头文件的搜索路径列表中添加dir 目录.-I-任何在`-I-'前面用`-I'选项指定的搜索路径只适用于`#include "file"'这种情况;他们不能用来搜索`#include <file>'包含的头文件.如果用`-I'选项指定的搜索路径位于`-I-'选项后面,就可以在这些路径中搜索所有的 `#include'指令. (一般说来-I选项就是这么用的.)还有, `-I-'选项能够阻止当前目录(存放当前输入文件的地方)成为搜索`#include "file"'的第一选择.没有办法克服`-I-'选项的这个效应.你可以指定 `-I.'搜索那个目录,它在调用编译器时是当前目录.这和预处理器的默认行为不完全一样,但是结果通常 令人满意.`-I-'不影响使用系统标准目录,因此, `-I-'和`-nostdinc'是不同的选项.-Ldir在`-l'选项的搜索路径列表中添加dir目录.-Bprefix这个选项指出在何处寻找可执行文件,库文件,以及编译器自己的数据文件. 编译器驱动程序需要执行某些下面的子程序: `cpp', `cc1' (或C++的`cc1plus'), `as'和`ld'.他把prefix当作欲执行的程序的 前缀,既可以包括也可以不包括`machine/version/'.对于要运行的子程序,编译器驱动程序首先试着加上`-B'前缀(如果存在).如果没有找到文件,或没有指定 `-B'选项,编译器接着会试验两个标准前缀`/usr/lib/gcc/'和 `/usr/local/lib/gcc-lib/'.如果仍然没能够找到所需文件,编译器就在`PATH'环境变量指定的路径中寻找没加任何前缀的文件名.如果有需要,运行时(run-time)支持文件`libgcc.a'也在`-B'前缀的搜索范围之内. 如果这里没有找到,就在上面提到的两个标准前缀中寻找,仅此而已.如果上述方法没有找到这个文件,就不连接他了.多数 情况的多数机器上, `libgcc.a'并非必不可少.你可以通过环境变量GCC_EXEC_PREFIX获得近似的效果;如果定义了这个变量,其值就和上面说的 一样用做前缀.如果同时指定了`-B'选项和GCC_EXEC_PREFIX变量,编译器首先使用 `-B'选项,然后才尝试环境变量值.警告选项(WARNING OPTION)警告是针对程序结构的诊断信息,程序不一定有错误,而是存在风险,或者可能存在 错误.下列选项控制GNU CC产生的警告的数量和类型:-fsyntax-only检查程序中的语法错误,但是不产生输出信息.-w禁止所有警告信息.-Wno-import禁止所有关于#import的警告信息.-pedantic打开完全服从ANSI C标准所需的全部警告诊断;拒绝接受采用了被禁止的语法扩展的程序.无论有没有这个选项,符合ANSI C标准的程序应该能够被正确编译(虽然极少数程序需要`-ansi' 选项).然而,如果没有这个选项,某些GNU扩展和传统C特性也得到支持.使用这个选项可以拒绝这些程序.没有理由使用这个选项,他存在只是为了满足一些书呆子(pedant).对于替选关键字(他们以`__'开始和结束) `-pedantic'不会产生警告信息. Pedantic 也不警告跟在__extension__后面的表达式.不过只应该在系统头文件中使用这种转义措施,应用程序最好 避免.-pedantic-errors该选项和`-pedantic'类似,但是显示错误而不是警告.-W对下列事件显示额外的警告信息:*非易变自动变量(nonvolatile automatic variable)可能在调用longjmp时发生改变. 这些警告仅在优化编译时发生.编译器只知道对setjmp的调用,他不可能知道会在哪里调用longjmp,事实上一个 信号处理例程可以在程序的任何地点调用他.其结果是,即使程序没有问题,你也可能会得到警告,因为无法在可能出现问题 的地方调用longjmp.*既可以返回值,也可以不返回值的函数. (缺少结尾的函数体被看作不返回函数值)例如,下面的函数将导致这种警告:foo (a){if (a > 0)return a;}由于GNU CC不知道某些函数永不返回(含有abort和longjmp),因此有可能出现 虚假警告.*表达式语句或逗号表达式的左侧没有产生作用(side effect).如果要防止这种警告,应该把未使用的表达式强制转换 为void类型.例如,这样的表达式`x[i,j]'会导致警告,而`x[(void)i,j]'就不会.*无符号数用`>'或`<='和零做比较.-Wimplicit-int警告没有指定类型的声明.-Wimplicit-function-declaration警告在声明之前就使用的函数.-Wimplicit同-Wimplicit-int和-Wimplicit-function-declaration.-Wmain如果把main函数声明或定义成奇怪的类型,编译器就发出警告.典型情况下,这个函数用于外部连接, 返回int数值,不需要参数,或指定两个参数.-Wreturn-type如果函数定义了返回类型,而默认类型是int型,编译器就发出警告.同时警告那些不带返回值的 return语句,如果他们所属的函数并非void类型.-Wunused如果某个局部变量除了声明就没再使用,或者声明了静态函数但是没有定义,或者某条语句的运算结果显然没有使用, 编译器就发出警告.-Wswitch如果某条switch语句的参数属于枚举类型,但是没有对应的case语句使用枚举元素,编译器 就发出警告. ( default语句的出现能够防止这个警告.)超出枚举范围的case语句同样会 导致这个警告.-Wcomment如果注释起始序列`/*'出现在注释中,编译器就发出警告.-Wtrigraphs警告任何出现的trigraph (假设允许使用他们).-Wformat检查对printf和scanf等函数的调用,确认各个参数类型和格式串中的一致.-Wchar-subscripts警告类型是char的数组下标.这是常见错误,程序员经常忘记在某些机器上char 有符号.-Wuninitialized在初始化之前就使用自动变量.这些警告只可能做优化编译时出现,因为他们需要数据流信息,只有做优化的时候才估算数据流信息.如果不指定 `-O'选项,就不会出现这些警告.这些警告仅针对等候分配寄存器的变量.因此不会发生在声明为volatile的变量上面,不会发生在已经 取得地址的变量,或长度不等于1, 2, 4, 8字节的变量.同样也不会发生在结构,联合或数组上面,即使他们在 寄存器中.注意,如果某个变量只计算了一个从未使用过的值,这里可能不会警告.因为在显示警告之前,这样的计算已经被 数据流分析删除了.这些警告作为可选项是因为GNU CC还没有智能到判别所有的情况,知道有些看上去错误的代码其实是正确的.下面是 一个这样的例子:{int x;switch (y){case 1: x = 1;break;case 2: x = 4;。
Makefile及GCC编译选项培训
language可取的值为:
c c-header cpp-output c++ c++-cpp-output objective-c objc-cpp-output assembler assembler-with-cpp ada f77 f77-cpp-input ratfor java
Makefile及GCC编译选项培训
Makefile中变量的使用:
objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o
edit : $(objects) cc -o edit $(objects)
Makefile及GCC编译选项培训
-ansi
支持所有ANSI标准的C程序。 这个开关不支持那些GNU C中与ANSI C 不兼容的特性,如关键词asm,inline和typeof,以及标明所用系统类型的预 定义宏,如unix和vax。它同时支持不受欢迎而且很少使用的ANSI三字母词 特性,不允许“$”作为标识符的一部分,不识别C++风格的“//”注释。
一般情况下GCC会采用特殊代码更高效地实现特定的内置函数。比如 调用alloca会变成若干直接调整堆栈的单一指令,而调用memcpy 会变成直 接插入的复制循环。这样产生的代码更小更快,而由于代码中没有了函数 调用,无法在这些调用中设置断点,也不能通过连接不同的库来改变这些 函数的功能。
-ansi 开关禁止函数alloca和ffs成为内置函数,因为它们没有ANSI标准 下的意义。
上下文中时,虽然没有用引号括起来,其数值被字符串化)。预处理器 认为字符串常量以新行为结束。
CC语言安全编程规范V
CC语言安全编程规范V公司标准化编码[QQX96QT・XQQB89Q*NQQJ6Q8・MQM9N]华为技术有限公司内部技术规范C&C++语言安全编程规范DKB AHUAWGI2013年03月07日发布2013年05月07日实施华为技术有限公司Huawei Technologies Co., Ltd.版权所有侵权必究修订声明本规范拟制与解释部门:网络安全技术能力中心本规范的相关系列规范或文件:《Java语言安全编程规范》《Web应用安全开发规范》相关国际规范或文件一致性:无替代或作废的其它规范或文件:无相关规范或文件的相互关系:本规范作为《C语言编程规范》和《C++语言编程规范》安全性要求的补充和扩C&C++语言安全编程规范0规范制定说明0. 1前言随着公司业务发展,越来越多的产品彼公众、互联网所熟知,并成为安全研究组织的研究对象、黑客的漏洞挖掘目标,容易引起安全问题。
安全问题影响的不只是单个产品,甚至有可能影响到公司整体声誉。
产品安全涉及需求、设计、实现、部署多个环节,实现的安全是产品安全的重要•环。
为了帮助产品开发团队编写安全的代码,减少甚至规避由于编码错谋引入安全风险,特制定本规范。
《c&c卄语言安全编程规范》参考业界安全编码的研究成果,并结合产品编码实践的经验总结,针对C/C++语言编程中的字符串操作、整数操作、内存管理、文件操作、STL库使用等方而,描述可能导致安全漏洞或潜在风险的常见错误。
以期减少缓冲区溢出、整数溢出、格式化字符串攻击、命令注入攻击、目录遍历等典型安全问题。
0.2使用对象本规范的读者及使用对象主要为使用C和C++语言的开发人员、测试人员等。
0.3适用范围本规范适合于公司基于C或C++语言开发的产品。
0.4术语定义原则:编程时必须遵守的指导思想。
规则:编程时必须遵守的约定。
建议:编程时必须加以考虑的约定。
说明:对此原则/规则/建议进行必要的解释。
错误示例;对此原则/规则/建议从反面给出例r=推荐做法:对此原则/规则/建议从正面给出例r。
stm32 程序gcc编译
stm32 程序gcc编译在STM32上使用GCC进行编译通常涉及到交叉编译(Cross Compilation),因为STM32是基于ARM Cortex-M架构的微控制器。
以下是一个简单的步骤,以便你使用GCC来编译STM32程序:1. 安装交叉编译工具链首先,你需要安装适用于ARM Cortex-M的交叉编译工具链。
你可以选择直接下载预编译好的工具链,或者通过包管理器进行安装。
一个常用的工具链是ARM GCC。
在Ubuntu中,你可以使用以下命令安装ARM GCC:```bashsudo apt-get install gcc-arm-none-eabi```2. 编写STM32程序使用你喜欢的文本编辑器编写STM32的C程序,保存为`.c`文件。
3. 编写Makefile创建一个Makefile来定义编译规则。
下面是一个简单的Makefile示例:```makeTARGET = your_project_nameSRCS = your_source_file.cOBJS = $(SRCS:.c=.o)# 编译器和工具CC = arm-none-eabi-gccOBJCOPY = arm-none-eabi-objcopy# 编译选项CFLAGS = -mcpu=cortex-m4 -mthumb -Wall -gLDFLAGS = -mcpu=cortex-m4 -mthumb -Wall -g -T linker_script.ldall: $(TARGET).bin$(TARGET).bin: $(TARGET).elf$(OBJCOPY) -O binary $< $@$(TARGET).elf: $(OBJS)$(CC) $(LDFLAGS) -o $@ $^%.o: %.c$(CC) $(CFLAGS) -c -o $@ $<clean:rm -f $(TARGET).elf $(TARGET).bin $(OBJS)```确保修改`your_project_name`和`your_source_file.c`为你的项目名称和源文件。
GCC与MinGW的简单安装与使用
编译时使用优化
gcc -O2 -c yours.c -o yours.o
使用优化方式编译程序,其中除了-O2以外,还有-O3 -O1等等。他们代表不同的优化等级。最常用的,是-O2优化。当然,还有针对特殊CPU的优化,这里就不介绍了。
编译时显示所有错误和警告信息
GCC与MinGW的简单安装与使用
分类: C MinGW GCC 编译器 2011-11-02 15:22 6122人阅读 评论(0) 收藏 举报
gccmakefile编译器汇编wildcardpath
注:本文通过互联网收集整理。
简单的GCC用法
总的来说,gcc应该是一个编译器。但整套的gcc环境并不是由gcc构成的,它是由多个包所组成的,这些包的互相作用产生了gcc的开发环境。其中,有一些包是你开发应用程序所必备的基本包,离开这些包你将无法正常使用gcc。
1. 多个文件一起编译
用法:#gcc testfun.c test.c -o test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。
2. 分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc -c testfun.c //将testfun.c编译成testfun.o
gcc -v
如果显示一段GCC的版本信息,说明你安装的MinGW能正常工作了。
第二种方案:自动安装
到/project/下载MinGW-x.x.x.exe。安装过程它会自动从网上下载相应的文件,并自动配置好环境。
编译连接时,加入调试代码
gcc -g -o yours yours.c
正如同VC有debug编译模式一样,gcc也有debug模式。添加了-g 参数编译的可执行程序比普通程序略为大一些,其中添加了一些调试代码。这些代码将被gdb所支持。
aocc编译
aocc编译
关于Aocc编译器的使用介绍:
Aocc是AMD公司开发的开源编译器,支持C,C++和Fortran编程语言。
Aocc编译器优化了AMD处理器的性能,提高了代码的执行速度和效率。
使用Aocc编译器需要先下载并安装相应的软件包。
在安装完成后,可以使用命令行工具来调用编译器进行代码编译。
例如,使用以下命令对C代码进行编译:
aocc myfile.c -o myfile
这将生成名为“myfile”的可执行文件。
使用-a选项可以开启优化,进一步提高代码效率:
aocc -a myfile.c -o myfile
此外,Aocc编译器还支持调试功能和其他命令行选项,具体请参考软件包里的文档和说明。
总的来说,Aocc编译器是一个高效且方便的工具,可帮助开发者优化代码并提高程序的性能。
gcc 常用参数
gcc 常用参数
GCC(GNU Compiler Collection)是一个常用的编译器,用于将源代码编译为目标代码。
GCC提供了许多常用的编译参数,以下是其中一些常用的参数:
-c:仅编译源代码文件,生成目标文件,但不进行链接操作。
-o:指定输出文件的名称。
-g:生成调试信息,方便程序调试和错误排查。
-Wall:显示所有警告信息。
-I:指定搜索包含头文件的路径。
-L:指定搜索包含库文件的路径。
-l:链接指定的库文件。
-O:优化生成的代码,提高执行效率。
-fPIC:生成位置无关的代码(Position Independent Code),用于生成动态库。
-D:定义宏。
-U:取消定义宏。
这些参数可以在编译过程中使用,以控制编译和链接的行为。
具体使用哪个参数取决于源代码的特性和编译器的版本。
建议查阅GCC的官方文档或使用gcc --help命令获取更多参数信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CC编译器的使用文档VisualAge C++ Professional / C for AIX Compiler, Version 5Usage:xlC [ option | inputfile ]...xlc [ option | inputfile ]...cc [ option | inputfile ]...c89 [ option | inputfile ]...xlC128 [ option | inputfile ]...xlc128 [ option | inputfile ]...cc128 [ option | inputfile ]...xlC_r [ option | inputfile ]...xlc_r [ option | inputfile ]...cc_r [ option | inputfile ]...xlC_r4 [ option | inputfile ]...xlc_r4 [ option | inputfile ]...cc_r4 [ option | inputfile ]...CC_r4 [ option | inputfile ]...xlC_r7 [ option | inputfile ]...xlc_r7 [ option | inputfile ]...cc_r7 [ option | inputfile ]...Description:The xlC and related commands compile C and C++ source files.The xlC and related commands compile C and C++ source files.They also processes assembler source files and object files. Unless the -c option is specified, xlC calls the linkage editor to produce asingle object file. Input files may be any of the following:1. file name with .C suffix: C++ source file2. file name with .i suffix: preprocessed C or C++ source file3. file name with .c suffix: C source file4. file name with .o suffix: object file for ld command5. file name with .s suffix: assembler source file6. file name with .so suffix: shared object fileOptions:Options can be flag options or keyword options:1. Flag options:-# Display language processing commands but donot invoke them; output goes to stdout.-+ Treat .c files as C++ source code.-bdynamic, -bstaticDetermines which types of library files are searched bythe linkage editor.-brtl Tells the linkage editor to accept both .so and .alibrary file types.-B<prefix>Construct alternate compiler/assembler/linkage editorprogram names. <prefix> is added to the beginning ofthe standard program names.-c Do not send object files to the linkage editor.-C Write comments to output when doing preprocessing,used with -E and -P.-D<name>[=<def>]Define <name> as in #define directive. If <def> isnot specified, 1 is assumed.-E Preprocess but do not compile; output goes to stdout-f<filename>Passes to the linkage editor the filename of a filecontaining a list of input files to be processed.-F<x>[:<stanza>]Use alternate configuration file <x> with optional<stanza>. If <stanza> is not specified, the assumed stanza is the name of the command used to invoke the compiler.-g Produce information for the debugger.-G Tells the linkage editor to create a dynamic library.-I<dir> Search in directory <dir> for include files thatdo not start with an absolute path.-l<key> Search the specified library file,where <key> selects the file lib<key>.a.-L<dir> Search in directory <dir> for files specified by -l<key>. -ma Generate inline calls to the "alloca" function as if"#pragma alloca" directives were in the source file.-M Generate information to be included in a "make"description file; output goes to .u file.-o<name> Name the executable file <name> instead of a.out.When used with the -c option and one source file,name the object file <name> instead of filename.o.If <name> is the name of a directory, files generated by the compiler will be placed into that directory.-O Optimize generated code.-O2 Same as -O.-O3 Perform some memory and compile time intensiveoptimizations in addition to those executed with -O2.The -O3 specific optimizations have the potential toalter the semantics of a user's program.The compiler guards against these optimizations at -O2and the option -qstrict is provided at -O3 to turn offthese aggressive optimizations.-O4 (C) Equivalent to -O3 -qipa with automatic generation ofarchitecture and tuning option ideal for that platform.-O5 (C) Equivalent to -O3 -qipa=level=2 with automaticgeneration of architecture and tuning option ideal forthat platform.-p Generate profiling support code. Same as -qprofile=p.-pg Generate profiling support code including BSDprofiling support. Same as -qprofile=pg.-P Preprocess but do not compile; output goes to .i file.-Q (C++) Turns on inlining.-Q! (C++) Turns off inlining.-Q<x>, -qinline<x>(C) Inline all appropriate functions where x can beone of the following:! Not inline any function (equivalent to -qnoinline) =<lc> Inline if number of source statement infunction is less than the number specifiedin <lc>.-<nm> Not inline function listed by names in <nm>+<nm> Attempt to inline function listed by namesin <nm>.-S Produce a .s file for any source file processed by thecompiler.-t<x> Apply prefix from the -B option to the specified program <x>, where x can be one or more of the following:p = preprocessorc = compiler frontendb = compiler backendi = compiler inlinera = assemblerl = linkage editorm = 'munch' utility (C++)f = C++ name demangler utility (C++)I = inter-procedural analysis - compile phaseL = inter-procedural analysis - link phase.-U<name> Undefine name as in #undef directive.-v Displays language processing commands as theyare invoked by xlC; output goes to stdout.-w Suppress informational, language-level, andwarning messages.-W<x,y> Give the options <y> to the compiler program <x>where x can be one or more of the following:<p,c,b,i,a,l,I,m,f>-y<x> Specify compile-time rounding of constant floating-point expressions, where <x> can be one of the following:n = round to nearestm = round toward minus infinityp = round toward positive infinityz = round toward zero.2. Keyword options:Keyword options are specified in one of the following ways:-q<option>-q<option>=<parameter>-q<option>=<parameter>:<parameter>where <option> is an option name and <parameter> is aparameter value.Keyword options with no parameters represent switchesthat may be either on or off. The keyword by itself turnsthe switch on, and the keyword preceded by the letters NOturns the switch off. For example, -qLIST tells thecompiler to produce a listing and -qNOLIST tells thecompiler not to produce a listing. If an option thatrepresents a switch is set more than once, the compileruses the last setting.Keyword option and parameter names may appear in eitherUPPER CASE or lower case letters in the xlC command.Options without parameters:32 Selects 32-bit compiler mode.64 Selects 64-bit compiler mode.ansialias Use type-based aliasing during optimization.attr Produce an attribute listing containing onlyreferenced names; output goes to .lst file.compact Reduce code size where possible, at the expenseof execution speed. Code size is reduced byinhibiting optimizations that replicate or expandcode inline.cpluscmt (C) Permit "//" to introduce a comment that lastsuntil the end of the current source line, as in C++.dbcs String literals and comments can contain DBCScharacters (same as mbcs option).dbxextra Generate symbol table information for unreferencedvariables. By default such information is not generatedthus reducing the size of the executable compiled withthe "-g" option. Same as -qsymtab=unref.digraph Allow special digraphdollar Allow '$' as an identifier characterdpcl Generates symbols for tools based on the DynamicProbe Class Library (DPCL)extchk Perform external name type-checking and functioncall checking.fdpr Collect information about programs for use withthe AIX fdpr (Feedback Directed Program Restructuring)performance-tuning utility.funcsect Place instructions for each function in a separate csect. flttrap Generate instructions to trap floating-pointexceptions.fold Specifies that constant floating-point expressionsare to be evaluated at compile time.fullpath Specifies the path information stored for files whenyou use "-g" and the symbolic debugger.heapdebug Enables debug versions of memory management functions.idirfirst Specify the search order for files included withthe #include "file_name" directive. Use -qidirfirstwith the -Idirectory option. If -qidirfirst optionis specified, the directories specified by the-Idirectory option are searched before the directorywhere the current file resides.ignerrno Tell the optimizer that the program will neverrefer to or set errno. This allows additionaloptimizations.inlglue Generate fast external linkage by inlining thecode (pointer glue code) necessary at callsvia a function pointer and calls to externalprocedures.ldbl128 Increase long double size from 64 to 128 bits.libansi Assumes that all functions with the name of anANSI C library functions are in fact the system functions. linedebug Generates abbreviated line number and source file nameinformation for the debugger.list Produce an object listing; output goes to .lst file.listopt Display the settings of all options; output goesto .lst file.longdouble Increase long double size from 64 to 128 bits.longlit Changes implicit type selection for integer constants in 64-bit mode.longlong Allow long long integers.macpstr Allow '\p' as the first character of a string constantwhich will be replaced by the length in bytes.makedep Creates an output file that contains targets suitable for inclusion in a description file for the AIX make command. mbcs String literals and comments can contain DBCScharacters (same as dbcs option).mkshrobj Create a shared object from generated object files.noprint Direct listing to /dev/null.nostdinc Specify which files are included with the #include"file_name" and #include <file_name> directives.If -qnostdinc is specified, the /usr/include directoryis not searched.once Only process each include file one time.The default is -qnoonce.optimize Same as O and O2. Perform optimization that is themix between speed and size. (If -qnooptimize isspecified, it is equivalent to -qoptimize=0.)pascal Accept and ignore the keyword 'pascal' as atype modifier.pdf1, pdf2 Perform aggressive optimizations with profiledirected feedback.phsinfo Produce compiler phase information; output goes tostdout.proto (C) Assert that procedure call points agreewith their declarations even if the procedure hasnot been prototyped. This allows the caller topass floating point arguments in floating pointregisters instead of general purpose registers.ro Put string literals in read only area.roconst Put constant values in read only area.rwvftable (C++) Place virtual function tables intoread/write memory.showinc Include the source of all included files in thesource listing, if the SOURCE option is in effect.source Produce a source listing; output goes to .lst file.srcmsg Reconstruct source lines in error along with thediagnostic messages in the stderr file.staticinlineTreat inline functions as static. The defaultis -qnostaticinline, which is necessary forANSI C++ 'extern inline' behaviour.-qnostaticinline may produce linker warningmessages about duplicate definitions. This isexpected.statsym Adds user-defined, nonexternal names that have apersistent storage class, such as initialized anduninitialized static variables, to the name list(the symbol table of xcoff objects). Same as-qsymtab=static.strict Turns off aggresive optimizations which have thepotential to alter the semantics of a user's program.This option also sets -qfloat=nofltint:norsqrt.strict_inductionTurns off induction variable optimizationsthat have the potential to alter the semantics of auser's program. The default is "nostrict_induction" at-O2 or higher and "strict_induction" otherwise."nostrict_induction" is recomended if your program does not have overflows or wrap arounds of loop inductionvariables.syntaxonly Causes the compiler to perform syntax checking withoutgenerating an object file.threaded Indicates to the compiler that the program will execute in multi-threaded environment.tempinc (C++) Automatically generate template functions in the"tempinc" subdirectory. Use the "notempinc" option tosuppress this behaviour.twolink (C++) Link twice in order to minimize the numberof static constructors included from libraries.unique (C++) Generates unique names for staticconstructor/destructor file compilation units.upconv (C) Preserves the unsigned specification when performing integral promotions.vftable (C++) Force virtual function tables to be generatedin this compilation unit. The default is to define the virtual function table for a class where the firstnon-inline virtual member function is declared. If-qnovftable is specified, then no virtual function tables are produced.warn64 Enables checking for possible long-to-integer orpointer-to-integer truncation.xcall Generate code to static routines within a compilationunit as if they were external routines.xref Produce a cross-reference listing containingonly referenced names.Options with parameters:aggrcopy=[no]overlapAsserts whether source and destination of aggregateassignments overlap.alias=<option>Specifies the aliasing assertion to be applied toyour compilation unit.The available options are:typ Pointers to different types are never aliased. allp Pointers are never aliased.addr Variables are disjoint from pointersunless their address is taken.ansi Pointers can only point to an object of thesame type. Require -O option.align=<algnopt>power The compiler uses the RISC System/6000alignment rules.full The compiler uses the RISC System/6000alignment rules. This is the same as power.mac68k The compiler uses the Macintosh**alignment rules.twobyte The compiler uses the Macintosh alignment rules. The mac68k option is the same as twobyte.packed The compiler uses the packed alignment rules.natural The compiler maps structure members totheir natural boundaries.bit_packedThe same as packed. In addition, bit-fields are packed as tight as possible.arch=<option>Specifies the architecture on which the executableprogram will be run.The available options are:com Produce an object that contains instructionsthat will run on all the POWER and PowerPChardware platforms.pwr Produce an object that contains instructionsthat will run on the POWER hardwareplatform.pwr2 Produce an object that contains instructionsthat will run on the POWER2 hardwareplatform.pwrx Same as pwr2.ppc Produce an object that contains instructionsthat will run on any of the 32-bit PowerPChardware platforms.ppcgr Produce an object that contains optionalgraphics instructions for PowerPC processors. pwr2s Produce an object that contains instructions that will run on a pwr2s chip.p2sc Produce an object that contains instructions that will run on a p2sc chip.601 Produce an object that contains instructions that will run on a 601 chip.602 Produce an object that contains instructions that will run on a 602 chip.603 Produce an object that contains instructions that will run on a 603 chip.604 Produce an object that contains instructions that will run on a 604 chip.403 Produce an object that contains instructions that will run on a 403 chip.rs64a Produce an object that contains instructions that will run on a rs64a chip.rs64b Produce an object that contains instructions that will run on a rs64b chip.rs64c Produce an object that contains instructions that will run on a rs64c chip.pwr3 Produce an object that contains instructions that will run on a POWER3 chip.The default is -qarch=com. If the -qarch option isspecified without the -qtune=<option>, the compileruses the default -qtune value for the specifiedarchitecture. Refer to online documentation to findactual default setting of -qtune for a given -qarch. assert=<option>Specifies the aliasing assertion to be applied toyour compilation unit.The available options are:typ Pointers to different types are never aliased. allp Pointers are never aliased.addr Variables are disjoint from pointersunless their address is taken.attr=full Produce an attribute listing containing all names,whether referenced or not; output goes to .lst file. bitfields=signedbitfields=unsignedSpecify whether bitfields will be signed or unsigned. cache=<suboption>:<suboption>...Describe the cache configuration for a specific targetexecution machine. See online documentation for details. chars=signedchars=unsignedSpecify whether the data type char will be signedor unsigned.check=<option>Generate code to check for run-time checks.nullptr Runtime checking of addressescontained in pointer variables used toreference storage.bounds Runtime checking of addresses whensubscripting within an object of known size.divzero Runtime checking of integer division.A trap will occur if an attempt is made todivide by zero.all Switches on all the above suboptions.cinc=<prefix>(C++) Include files from directories starting with<prefix> have the tokens 'extern "C" {' insertedbefore the file and '}' after it.dataimported=<name1>:<name2>: ...Specify which data items are imported. If no names are specified, all data items are assumed to be imported.This is the default.datalocal=<name1>:<name2>: ...Specify which data items are local. If no names arespecified, all data items are assumed to be local.enum=<enumopt>Specify whether minimum-sized enumerated types will be produced or not. <enumopt> can be either small, int,(C++)intlong, 1, 2, 4 or 8.small denotes that either one, two, four or eight (valid in 64-bit mode only) bytes of storage will be allocated for enum variables based on the range of the enumconstants.int is the default, and causes enum variables to betreated as though they were of type signed intdepending on the range of the enum constants.intlong (C++) specifies that enumerations occupy 8bytes of storage and are represented by long,if -q64 is specified and the range of theenum constants exceed the limit for int.1 will cause enum variables to be packed into 1 byte.2 will cause enum variables to be packed into 2 bytes. 4 will cause enum variables to be packed into 4 bytes.8 will cause enum variables to be packed into 8 bytes. (enum=8 is valid in 64-bit mode only)flag=<sev1>Specify severity level of diagnostics to be reported in source listing and stderr; the severity levelis one of <i,w,e,s,u>.flag=<sev1>:<sev2>Specify severity level of diagnostics to be reported in source listing (<sev1>), and stderr (<sev2>);the severity levels are one of <i,w,e,s,u>.float=<opt1>:<opt2>:...:<optN>The available options are:emulate Function calls are emitted in place ofPowerPC floating-point instructions.Use this option only in a single-threadedstand-alone environment, targeting thePowerPC 403 processor.Do not use this suboption with any of thefollowing:o -qarch=pwr, -qarch=pwr2, -qarch=pwrxo -qlongdouble, -qldbl128o xlC128, xlc128 invocation commandsfltint Specify whether range checking of floatingpoint to integer conversions is done.Default at -O2: -qfloat=nofltint.Default at -O3: -qfloat=fltint.hsflt Never round single-precision expressions,and don't perform range checking forfloating-point to integer conversions.hssngl Round single-precision expressions onlywhen the results are stored into float memory locations.nans Detect conversion of single-precision NaNS to double precision call checking.nomaf Suppress generation of multiply-addinstructions.nofold Suppress compile-time evaluation of constant floating-point expressions.rndsngl Ensure strict adherence to IEEE standard.all operations on single-precision valuesproduce results that remain in singleprecision.rrm Specify run-time rounding mode. Compile with this option if the run-time rounding modeis round toward minus infinity, round towardpositive infinity, or not known.rsqrt Specify whether a division by the result of asquare root can be replaced with a multiplyby the reciprocal of the square root.Default at -O2: -qfloat=norsqrt.Default at -O3: -qfloat=rsqrt.spnans Generate extra instructions to detect signalling NaN on conversion from single precision todouble precision. Obsolete; use the equivalent -qfloat=nans option.flttrap=<opt1>:<opt2>:...:<optN>Generate instructions to detect and trap floating-point. The available options are: overflow, underflow,zerodivide, invalid, inexact, enable, imprecise.halt=<sev> Stop compiler after first phase if severity of errorsdetected equals or exceeds <sev>; the severitylevel is one of i, w, e, s, u.genpcomp[=dirname](C) Generate precompiled include files. See onlinedocumentation for details.genproto=<parmnames>Produces ANSI prototypes from K&R function definitions. ignprag=<option>The available options are:disjointIgnore pragma disjoint.isolatedIgnore pragma isolated_call.omp (C) Ignore OpenMP parallel processing pragmas. ibm (C) Ignore IBM parallel processing pragmas.all Ignore all the above pragmas.infoinfo=allProduce additional lint-like messages. For C, it turns on all diagnostic messages for all groups. For C++, it turns on all diagnostic messages for all groups, except ppt.info=<group>Produce additional lint-like messages based on <group>. cmp Possible redundancies in unsigned comparisonscnd Possible redundancies or problems in conditional expressionscns Operations involving constants.cnv Conversionsdcl Consistency of declarationseff Statements with no effectenu Consistency of enum variablesext Unused external definitionsgen General diagnostic messagesgnr Generation of temporary variablesgot Use of goto statementsini Possible problems with initializationinl Functions not inlinedlan Language level effectsobs Obsolete featuresord Unspecified order of evaluationpar Unused parameterspor Nonportable language constructsppc Possible problems with using the preprocessorppt Trace of preprocessor actionspro Missing function prototypesrea Code that cannot be reachedret Consistency of return statementstrd Possible truncation or loss of data or precision tru Variable names truncated by the compileruni Unitialized variablesuse Unused auto and static variablesvft (C++) Generation of virtual function tablesprivate (C) Lists shared variables made private to aparallel loop.reduction(C) Lists all variables that are recognized as reduction variables inside a parallel loop.initauto=<hh>Initialialize automatic storage to <hh>. <hh> is ahexadecimal value. This generates extra code andshould only be used for error determination.inline[=<x>]This is functionally equivalent to the -Q option.ipa[=<ipa_options>](C) Turn on inter-procedural analysis. See onlinedocumentation for details.isolated_call=<name1>:<name2>: ...Specify that the calls to the functions listed have no side effects. <name1> and <name2> are function names.The user may specify as many function names asnecessary.langlvl=<langlvl>:<feature>:...Specify language level and/or features to be enabledduring compilation.<langlvl>(C) can be ansi, saal2, saa, extended, orclassic.<langlvl>(C++) can be ansi/strict98, compat366, orextended.<feature>can be:[no]ucs enables or disables support foruniversal character names.<feature>(C++) can be:typedefclass allows typedef names to be used in base specifiers and in memory initializers.anonstruct allows anonymous structs.ansifor allows new ANSI scopes are to be used for variables declared infor-init-statements.oldfriend allows friend declarationswithout elaborated classnames.oldmath prevents the inclusion of newANSI math functions in <math.h>. oldstr prevents the inclusion of newstring functions in <cstring>.oldtempacc suppresses copy-constructoraccess checking for eliminatedtemporaries.oldtmplspec allows old-style templatespecializations.anonunion allows non-data members inanonymous unions. Memberfunctions are not allowed.illptom allows ill-formed pointer tomember expressions.implicitint allows implicit intnewexcp determines whether the systemoperator new (other than thenothrow variants) throw thestandard exception std::bad_alloc when the requested allocationfails.offsetnonpod allows offsetof() to be used with non-POD (plain ol' data) classes. olddigraph support old-style digraphsredefmac specifies whether a macro can beredefined without a prior #undefor an undefine() optiontrailenum allows trailing enum commas.zeroextarray allows a zero-extent array asthe last non-static data memberof a struct.maxerr=<num>[:<sev>]Instructs the compiler to halt compilation when <num>errors of <sev> or greater severity is reached. Thedefault for <sev> is current value of the -qhalt option. maxmem=<num>Limit the amount of memory used by space intensiveoptimizations to <num>. <num> specified in kilobytes.mkshrobj=<num>(C++) Create a shared object from generated object files. The optional number specifies the priority level for the file.priority=<num>(C++) Specifies the priority level for the initialization of static constructors.optimize=<level>Enables different levels of optimization.2 Same as -O and -qoptimize.3 Same as -O3. Aggresive optimization.4 (C) Same as -O4. Internally generates -O3 -qipa with automatic architecture and tuning optiongeneration.5 (C) Same as -O5. Internally generates -O3-qipa=level=2 with automatic architecture andtuning option generation.proclocal=<name1>:<name2>: ...Specify which functions are local.If no filenames are specified, all invoked functionsare assumed to be defined within the current file.The last explicit specification for a function takesprecedence.procimported=<name1>:<name2>: ...Specify which functions are imported. If no filenamesare specified, all invoked functions are assumed to bedefined outside the current file. The last explicitspecification for a function takes precedence.procunknown=<name1>:<name2>: ...Specify which functions are unknown to be local orimported. If no filenames are specified, all functions。