Linux 版 (精华区)
发信人: xian (我想用心来点亮希望), 信区: Linux
标 题: GNU CC 2.7.2解剖和移植(1)
发信站: 紫 丁 香 (Sun May 2 15:52:13 1999), 转信
使用GNUCC
这一部分介绍如何运行,安装GNUC编译器,描述此编译器的新功能,
它与标准C的非兼容部分,给出使用此编译器涉及的各种控制选项,
提示当该编译器中存在的错误时应如何向GNU报告.
"GNUCC"是GNUCCompiler的全称,通常它指的是整个GNUC编译系统
并且特别指的是编译系统中与语言无关的部分.
GNUC编译器中集中了C,C++和Objective-C三个编译版本,该编译器
可以编译用C,C++和Objective-C书写的源程序.
GNUC编译器简称"GCC".GCC是本编译器的通用名字,也是在强调编译
C程序时用的名字.当强调编译的是C++程序时,通常称本编译器为
"G++".因为实际上只有一个编译器,因此无论所编译的源程序是上
述三种语言中的哪一种书写的,都可称本编译器为"GCC".
G++是一个编译器而不仅仅只是一个预处理器,G++直接由用户的
C++源程序建立目标代码而不是将C++源程序改写成此程序的中间
C版本.避免中间C版本意味着C++程序能具有更好的目标代码和更
好的调试信息.GNU调试器GDB可接收此目标代码中的有关信息并
提供给C++源程序级别的调试功能.
其他语言(如Ada9x,FORTRAN,Modula-3,PASCAL)的前端目前正在
开发中.这些前端类似于C++的前端,也建立在GNUCC的子目录中
并与之有链接关系.最终结果是形成一个集成化的编译系统,它
能够编译用C,C++和Objective-C编写的程序和其他任何已安装
了其前端的语言编写的程序.
我们将只介绍C,C++和Objective-C编译的各种选项.
GNUCC命令选项
当运行GNUCC时,其过程通常包括预处理(cpp),编译(cc1),汇编
(as)和链接(ld)等步骤."全局选项"允许你停止此过程于某一
步骤.例如:'-c'选项指出不要进行链接步骤.于是运行GNU
CC产生的输出文件则为汇编步骤产生的目标文件.
另外一些选项则被传送给上述过程中的某一步骤,一些选项用
于控制预处理器而另一些选项则控制编译器本身,还有一些选项
则用于控制汇编和链接.这些汇编和链接选项中的大部分都
未列在本手册中,因为一般几乎不需要用到它们.
GNUCC的大部分命令选项对C程序都是可用的,当一个选项仅仅
只能用于某一种语言(通常为C++)时,本手册将明显地指出.若
对一个具体选项的描述没有指明适应的源语言,则此选项可
用于所支持的所有语言.
Gcc程序将所有的选项和文件名统统作为参数接收,许多选项
具有多字母名字,因此,多个单字母选项不能归并为一个选项,
例如:'-dr'与'-d-r'是完全不同的形式.
可以将各种选项和其他参数混合在一起使用,大部分情况下,
其顺序并无影响,但当同时使用若干个相同类型的选项时,其
出现的顺序先后则有关系.例如:当指定'-L'选项多次时,将按指
定的顺序查询各个目录.
许多选项是以'-f'和'-W'打头的长名字选项,例
如:'-fforce-mem','-fsrength-reduce','-Wformat'等等.
这类选项大部分都有正反两种形式,例如:'-ffoo'的相反形式
是'-fno-foo'.本手册只描述两种形式中之一,即非缺省的那个
选项形式.
选项一览表
OverallOptions(全局选项)
-c-S-E-ofile-pipe-v-xlanguage
LanguageOptions(C语言选项)
-ansi-fallow-single-precision-fcond-mismatch
-fno-asm-fno-builtin-fsigned-bitfields-fsigned-char
-funsigned-bitfields-funsigned-char-fwritable-strings
-traditional-traditional-cpp-trigraphs
C++语言选项
-fall-virtual-fdollars-in-identifiers-felide-constructors
-fenum-int-equiv-fexternal-templates-ffor-scope
-fno-for-scope-fhandle-signatures
-fmemoize-lookups-fno-default-inline-fno-gnu-keywords
-fnonull-objects-foperator-names-fstrict-prototype
-fthis-is-variable-nostdinc++-traditional+en
WarningOptions(警告信息选项)
-fsyntax-only-pedantic-pedantic-errors-w-W-Wall
-Waggregate-return_Wbad-function-cast-Wcast-align-Wcast-qual
-Wchar-subscript-Wcomment-Wconversion-Wenum-clash
-Werror-Wformat-Wid-clash-len-Wimplicit-Wimport-Winline
-Wimplicit-int-Wimplicit-function-declaration-Winline-Wlarger-than-len
-Wmain-Wmissing-prototypes-Wmissing-declarations
-Wnested-externs-Wno-import-Woverloaded-virtual-Wparentheses
-Wpointer-arith-Wredundant-decls-Wreorder-Wreturn-type
-Wshadow-Wstrict-prototypes-Wswitch-Wsynth
-Wtemplate-debugging-Wtraditional-Wtrigraphs
-Wuninitialized-Wunused-Wwrite-strings
DebuggingOptions(调试选项)
-a-dletters-fpretend-float-g-glevel-gcoff-gxcoff
-gxcoff+-gdwarf-gdwarf+-gstabs-gstabs+-ggdb-p-pg
-save-temps-print-file-name=library-print-search-dirs
-print-libgcc-file-name-print-prog-name=program
OptimizationOptions(优化选项)
-fcaller-saves-fcse-follow-jumps-fcse-skip-blocks
-fdelayed-branch-fexpensive-optimizations-ffast-math-ffloat-store
-fforce-addr-fforce-mem-finline-functions-fkeep-inline-functions
-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-O0-O1-O2-O3
PreprocessorOptions(预处理选项)
-Aassertion(answer)-C-dD-dM-dN-Dmacro[=defn]-E-H
-idirafterdir-includefile-imacrosfile-iprefixprefix
-iwithprefixdir-iwithprefixbeforedir-isystemdir-M-MD
-MM-MMD-MG-nostdinc-P-trigraphs-undef
-Umacro-Wp,option
AssemblerOption(汇编选项)
-Wa,option
LinkerOptions(链接选项)
Object-file-name-llibrary-nostartfiles-nodefaultlibs-nostdlib-s
-static-shared-symbolic-Xlinkeroption-Wl,option-usymbol
DirectoryOptions(目录选项)
-Bprefix-Idir-I--Ldir
TargetOptions(目标机和版本选项)
-bmachine-Vversion
ConfigurationDependentOptions(机器相关选项)
M680x0Options(M680x0选项)
-m68000-m68020-m68020-40-m68030-m68040-m68881
-mbitfield-mc68000-mc68020-mfpa-mnobitfield-mrtd
-mshort-msoft-float
VAXOptions(VAX选项)
-mg-mgnu-munix
SPARCOptions(SPARC选项)
-mepilogue-mfpu-mhard-float-mno-fpu-mno-epilogue
-msoft-float-msparclite-mv8-msupersparc-mcypress
ConvexOptions(Convex选项)
-margcount-mc1-mc2-mnoargcount
AMD29KOptions(AMD29K选项)
-m29000-m29050-mbw-mdw-mkernel-registers-mlarge
-mnbw-mnodw-msmall-mstack-check-muser-registers
M88KOptions(M88K选项)
-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-structs
RS6000Options(RS6000和PowerPC选项)
-mfp-in-toc-mno-fop-in-toc
RTOptions(RT选项)
-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-return
MIPSOptions(MIPS选项)
-mabicalls-mcpu=cputype-mips2-mips3-mint64-mlong64
-mlonglong128-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-Gnum-nocpp
i386Options(i386选项)
-m486-m386-mieee-fp-mno-fancy-math-387
-msoft-float-mno-fp-ret-in-387-msvr3-shlib
HPPAOptions(HPPA选项)
-mpa-risc-1-0-mpa-risc-1-1-mkernel-mshared-libs
-mno-shared-libs-mlong-calls-mdisable-fpregs
-mdisable-indexing-mtrailing-colon
i960Options(Intel960选项)
-mcputype-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-align
DECAlphaOptions(DECAlpha选项)
-mfp-regs-mno-fp-regs-mno-soft-float-msoft-float
SystemVOptions(SYSV选项)
-Qy-Qn-Qn-YP,paths-Ym,dir
Clipper选项
-mc300-mc400
H8/300选项
-mrelax-mh
ARM选项
-mapcs-m2-m3-m6-mbsd-mxopen-mno-symrename
CodeGenerationOptions(代码生成选项)
-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
选项说明
全局选项
编译过程按顺序一般有预处理,编译,汇编和链接四个步骤.前三个步骤
作用于各类特定的源文件,并最终生成目标文件;最后一个步骤则将所有
目标文件(那些由编译新生成的目标文件以及那些作为输入文件指定的
目标文件)连接装配成一个可执行文件.
对给定的输入文件,文件名后缀决定了源文件的类型以及编译过程必须
经历的步骤:
file.cC源代码,必须经过预处理
file.iC源代码,不需经过预处理
file.iiC++源代码,不需经过预处理
file.mObjective-C源代码,注意,为了运行objective-C程序,必须连接'libobjc.a'库
file.h未经过编译或连接的C头文件
file.cxx
file.cpp
file.CC++源代码,必须经过预处理,注意,'cxx'中的'x'均是字母x.'.C'中的C为大写字母C.
File.s汇编源代码,不经过预处理和编译
File.S汇编源代码,必须预处理
Other直接进行链接的目标文件,任何非上述后缀的文件名都被认为属于此类目标文件
可以用'-x'选项明确地指出输入文件是何种语言
-xlanguage
指明输入文件的语言(而不是由编译根据文件名后缀确定其语言),这一选项
作用于其后的所有输入文件直至遇到下一个'-x'选项为止
language可选的值为:
cobjective-cc++c-headercpp-outputassemblerassembler-with-cpp
-xnone
关闭已指明的语言,使其后出现的文件根据文件名后缀确定其语言(就好象
`-x'从未使用过一样).
如果只需进行编译过程中的某一个或某几个步骤,可以使用'-x'选项(或文件名
后缀原则)告知gcc从哪一个步骤开始编译,而'-c','-S'或'-E'选项则用来告知gcc
停止于哪一个步骤之后.注意,对某些组合(如'-xcpp-output-E'),gcc将不做
任何事情.
-c对源文件进行编译或汇编,但不链接.仅仅不进行链接步骤,最后的输出文件类
型是每个源文件的目标文件.每一种源文件的缺省目标文件名是用后缀
'.o'代替源文件名的后缀".c",".i",".s".忽略不经过编译或汇编的不可识别的输
入文件.
-S停止于编译步骤之后,不进行汇编步骤,最后的输出文件类型为汇编源代码文
件.
-E停止于预处理之后,不进行编译步骤,最后的输出文件类型为经过预处理之
后的源代码文件.此文件被输出至标准输出文件.
-ofile放置输出文件file中,它适用于所有类型的输出文件,即,可以是可执行文件,
目标文件,汇编文件或经预处理之后的源代码文件.
因为'-o'选项只能指明一个文件,所以,使用'-o'选项对于编译多个输入文件的
情形将无意义,除非你要生成的输出文件是可执行文件,若未指明'-o',缺省约
定是:将可执行文件放置在a.out中;若输入源文件为source.suffix,则目标文
件放置在source.o中,汇编文件放置在source.s中;而所有预处理后的C源
代码则输出至标准输出文件
-v显示运行编译过程所执行的各个编译步骤命令,同时显示编译驱绦?预处
理器以及编译器的版本号.
-pipe在编译各步骤之间用管道而不是用临时文件进行通讯,这一选项在那些其编
译器不能从管道输入的系统中无效,GNU汇编无此问题.
admin@studio.openunix.org
--
※ 修改:.netiscpu 于 May 2 16:10:14 修改本文.[FROM: dns.mtlab.hit.ed]
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.239.115]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.293毫秒