中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
gcc基本的使用方法及常用指令
作者:未知 时间:2005-09-13 23:33 出处:Blog.ChinaUnix.net 责编:chinaitpower
              摘要:gcc基本的使用方法及常用指令

gcc基本的使用方法及常用指令
前言

  编译器在编译过程中,先将程式码编译成 object 档,然後再和程式库联结,成为可执行档。故一个编译器须提供的参数主要有几类:
  1.指定编译器编出的object 档或是可执行档档名。
  2.在编译过程做最佳化,可提升程式的执行速度。
  3.设定搜寻程式库的标头档 (header file) 及程式库档的目录及指定程式库档档名。
  提供进一步的资讯以便使用者找寻程式中的错误。


  以下便以这四个大类分别介绍。
  注意:下面在不同类别中所介绍的参数,几乎都可以混合著使用。
  1.设定编译出的 object 档档名或是可执行档档名:
  参数: -o out_put_filename
  说明: 指定编译出的档名为 out_put_filename。
  范例: 本例将程式码 'test.c' 编译成可执行档,并设定档名为 'test'。
  gcc test.c -o test

  2.在编译过程做最佳化
  参数: -O
  说明: 在编译过程做最佳化,以提升增快程式执行速度。
  范例: 本例将程式码 'test.c' 编译成可执行档 'test',并在编译过程做最佳化'。 
  gcc -O test.c -o test

  3.设定搜寻标头档目录、程式库档的目录及指定程式库档。
  3.1设定搜寻标头档目录
  参数: -Idir_name
  说明: 将目录 'dir_name' 设定为搜寻标头档目录之一。

  3.2设定搜寻程式库目录。
  参数: -Ldir_name
  说明: 将目录 'dir_name' 设定为搜寻程式库目录之一。
 
  3.3设定程式库档案。
  参数: -lname
  说明: 联结程式库 libname.a 。
  
  范例一:本例中假设你的程式档名为test.c,数学函数如 sin等,所要联结的程式库为 libm.a。
  gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test
  范例二:本例中假设你的程式档名为 test.c,使用到 X window 函数,所需的 include 档放在 /usr/X11R6/include 中,所须联结的程式库放在 /usr/X11R6/lib,所要联结的程式库为 libX11.a。
  gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test 
  提供进一步的资讯以便使用者找寻程式中的错误。

  参数: -Wall
  说明: 输出较多的警告讯息,以便找出程式的错误。
  范例: 编译 test.c 时输出较多的警告讯息。
  gcc -Wall test.c
  
  参数: -g
  说明: 在编译出可执行档时,附加执行时除错资讯,以供 gdb 读取 (若要使用 ABSoft 的除错程式,则须将参数改为 -gdwarf )。
  范例: 将 'test.c' 编译成可执行档 'test',并附加除错资讯。
  gcc -g test.c -o test
  
  进阶参数
  1. 仅编译成 object 档。
  参数: -c
  说明: 仅编译成 object 档而不进行程式库联结。
  范例: 将 test.c 编译成 object 档 test.o。
  gcc -c test.c -o test.o
  
  2. 联结数个 object 成可执行档。
  范例: 将 'test1.o'、'test2.o' 和程式库联结後成为可执行档 test。
  gcc test1.o test2.o -o test
  
  3. 观察宏展开情形:
  参数: -E
  说明:展开程式中的宏以便了解巨集是否依照预期方式展开。
  范例:将 test1.c 中的宏展开後储存到 test1.c.ext 。
  gcc -E test1.c > test1.c.ext
  
  4. 产生组合语言程式码:
  参数: -S
  范例:编译 test.c 产生对应的组合语言程式码档 test.s。
  gcc -S test.c -o test.s


GCC(1)     GNU Tools     GCC(1)
NAME
    gcc, g++ - GNU project C and C++ Compiler (v2.7)

SYNOPSIS
    gcc [ option | filename ]...
    g++ [ option | filename ]...

WARNING
    The information  in this man page is an extract from the
    full documentation of the GNU C compiler, and is limited
    to the meaning of the options.

    This man page is not kept up to date except when volun-
    teers want to maintain it.  If you find a discrepancy
    between the man page and the software, please check the
    Info file, which is the authoritative documentation.

    If we find that the things in this man page that  are out
    of date cause significant confusion or complaints, we will
    stop distributing the man page. The alternative, updating
    the man  page when we update the Info file, is impossible
    because the rest of the work of maintaining GNU CC leaves
    us no time for that. The GNU project regards man pages as
    obsolete and should not let them take time away from other
    things.

    For complete and current documentation, refer to the Info
    file `gcc' or the manual Using and Porting GNU  CC (for
    version 2.0). Both are made from the Texinfo source file
    gcc.texinfo.

DESCRIPTION
    The C and C++ compilers  are integrated.  Both process
    input files through one or more of four stages: prepro-
    cessing, compilation, assembly, and linking. Source file-
    name suffixes identify the source language, but which name
    you use for the compiler governs default assumptions:

    gcc  assumes preprocessed (.i) files are C and assumes C
    style linking.

    g++  assumes preprocessed (.i) files are C++ and assumes
    C++ style linking.

    Suffixes of source file names indicate the language and
    kind of processing to be done:

    .c  C source; preprocess, compile, assemble
    .C  C++ source; preprocess, compile, assemble
    .cc  C++ source; preprocess, compile, assemble
    .cxx C++ source; preprocess, compile, assemble
    .m  Objective-C source; preprocess, compile, assemble
    .i  preprocessed C; compile, assemble
    .ii  preprocessed C++; compile, assemble

GNU Tools    1993/10/13    1
GCC(1)     GNU Tools     GCC(1)


    .s  Assembler source; assemble
    .S  Assembler source; preprocess, assemble
    .h  Preprocessor file; not usually named on command line

    Files with other suffixes are passed to the linker. Com-
    mon cases include:

    .o  Object file
    .a  Archive file

    Linking is always the last stage unless you use one of the
    -c, -S,  or -E options to avoid it (or unless compilation
    errors stop the whole process). For the link stage, all
    .o files corresponding  to source files, -l libraries,
    unrecognized filenames (including named .o object files
    and .a archives) are passed to the linker in command-line
    order.

OPTIONS
    Options must be separate: `-dr' is quite different from
    `-d -r '.

    Most `-f' and `-W' options have two contrary forms: -fname
    and -fno-name (or -Wname and -Wno-name).  Only the non-
    default forms are shown here.

    Here is  a summary of all the options, grouped by type.
    Explanations are in the following sections.

    Overall Options
    -c -S -E -o file -pipe -v -x language

    Language Options
    -ansi -fall-virtual -fcond-mismatch
    -fdollars-in-identifiers -fenum-int-equiv
    -fexternal-templates -fno-asm -fno-builtin
    -fno-strict-prototype -fsigned-bitfields
    -fsigned-char -fthis-is-variable
    -funsigned-bitfields -funsigned-char
    -fwritable-strings -traditional -traditional-cpp
    -trigraphs

    Warning Options
    -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 -Winline -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


GNU Tools    1993/10/13    2
GCC(1)     GNU Tools     GCC(1)


    Debugging Options
    -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 Options
    -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

    Preprocessor Options
    -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 Options
    -llibrary -nostartfiles -nostdlib -static -shared
    -symbolic -Xlinker option -Wl,option -u symbol

    Directory Options
    -Bprefix -Idir -I- -Ldir

    Target Options
    -b machine -V version

    Configuration Dependent Options
    M680x0 Options
    -m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881
    -mbitfield -mc68000 -mc68020 -mfpa -mnobitfield
    -mrtd -mshort -msoft-float

    VAX Options
    -mg -mgnu -munix

    SPARC Options
    -mepilogue -mfpu -mhard-float -mno-fpu
    -mno-epilogue -msoft-float -msparclite -mv8
    -msupersparc -mcypress

    Convex Options
    -margcount -mc1 -mc2 -mnoargcount

GNU Tools    1993/10/13    3
GCC(1)     GNU Tools     GCC(1)


    AMD29K Options
    -m29000 -m29050 -mbw -mdw -mkernel-registers
    -mlarge -mnbw -mnodw -msmall -mstack-check
    -muser-registers

    M88K Options
    -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

    RS6000 Options
    -mfp-in-toc -mno-fop-in-toc

    RT Options
    -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

    MIPS Options
    -mcpu=cpu type -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 -G num -nocpp

    i386 Options
    -m486 -mno-486 -msoft-float -mno-fp-ret-in-387

    HPPA Options
    -mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs
    -mno-shared-libs -mlong-calls -mdisable-fpregs
    -mdisable-indexing -mtrailing-colon

    i960 Options
    -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-align

    DEC Alpha Options
    -mfp-regs -mno-fp-regs -mno-soft-float -msoft-float

    System V Options

GNU Tools    1993/10/13    4
GCC(1)     GNU Tools     GCC(1)


    -G -Qy -Qn -YP,paths -Ym,dir

    Code Generation Options
    -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 OPTIONS
    -x language
    Specify explicitly the language for the following
    input files (rather than choosing a default based
    on the file name suffix) . This option applies to
    all following input files until the next `-x' op-
    tion.  Possible  values of language are `c',
    `objective-c', `c-header', `c++',  `cpp-output',
    `assembler', and `assembler-with-cpp'.

    -x none
    Turn off  any specification of a language, so that
    subsequent files are handled according to their
    file name suffixes (as  they are if `-x' has not
    been used at all).

    If you want only some of the four stages (preprocess, com-
    pile, assemble, link), you can use `-x' (or filename suf-
    fixes) to tell gcc where to start, and one of the options
    `-c', `-S', or  `-E' to say where gcc is to stop. Note
    that some combinations (for example, `-x  cpp-output -E')
    instruct gcc to do nothing at all.

    -c   Compile or assemble the source files, but do not
    link. The compiler output is an object file corre-
    sponding to each source file.

    By default, GCC  makes the object file name for a
    source file by replacing the suffix `.c', `.i',
    `.s', etc., with `.o'.  Use -o to select another
    name.

    GCC ignores any unrecognized input files (those
    that do not require compilation or assembly) with
    the -c option.

    -S   Stop after the stage of compilation proper; do not
    assemble.  The output is an assembler code file for
    each non-assembler input file specified.

    By default, GCC makes the assembler file name for a
    source file by replacing the suffix `.c', `.i',
    etc., with `.s'. Use -o to select another name.


GNU Tools    1993/10/13    5
GCC(1)     GNU Tools     GCC(1)


    GCC ignores any input files that don't require com-
    pilation.

    -E   Stop after the preprocessing stage; do not run the
    compiler proper. The output is preprocessed source
    code, which is sent to the standard output.

    GCC ignores input files which don't require prepro-
    cessing.

    -o file
    Place output in file file. This applies regardless
    to whatever sort of output GCC is producing,
    whether it be an executable file, an object file,
    an assembler file or preprocessed C code.

    Since only one output file can be specified, it
    does not make sense to use `-o' when compiling more
    than one  input file, unless you are producing an
    executable file as output.

    If you do not specify `-o', the default is to put
    an executable file in `a.out', the object file for
    `source.suffix' in `source.o', its assembler file
    in `source.s', and all  preprocessed C source on
    standard output.

    -v   Print (on standard error output) the commands exe-
    cuted to run the stages of compilation. Also print
    the version number of the compiler driver program
    and of the preprocessor and the compiler proper.

    -pipe Use pipes rather than temporary files for communi-
    cation between the various stages  of compilation.
    This fails to work on some systems where the assem-
    bler cannot read from a pipe; but the GNU assembler
    has no trouble.


LANGUAGE OPTIONS
    The following options control the dialect of C that the
    compiler accepts:

    -ansi Support all ANSI standard C programs.

    This turns off certain features of GNU C that are
    incompatible with ANSI C, such as the asm, inline
    and typeof keywords, and predefined macros such as
    unix and  vax that identify the type of system you
    are using. It also enables the  undesirable and
    rarely used ANSI trigraph feature, and disallows
    `$' as part of identifiers.

    The alternate keywords __asm__,  __extension__,

GNU Tools    1993/10/13    6
GCC(1)     GNU Tools     GCC(1)


    __inline__ and __typeof__ continue to work despite
    `-ansi'. You would not want to use them in an ANSI
    C  program, of course, but it is useful to put them
    in header files that might be included in  compila-
    tions done with  `-ansi'.  Alternate predefined
    macros such as __unix__ and __vax__ are also avail-
    able, with or without `-ansi'.

    The `-ansi' option does not cause non-ANSI programs
    to be rejected gratuitously. For that, `-pedantic'
    is required in addition to `-ansi'.

    The preprocessor predefines a macro __STRICT_ANSI__
    when you use the `-ansi' option. Some header files
    may notice this  macro and refrain from declaring
    certain functions or defining certain macros that
    the ANSI  standard doesn't call for; this is to
    avoid interfering with any programs that might use
    these names for other things.

    -fno-asm
    Do not recognize asm, inline or typeof as a key-
    word. These words may then be used as identifiers.
    You can use __asm__, __inline__ and __typeof__ in-
    stead. `-ansi' implies `-fno-asm'.

    -fno-builtin
    Don't recognize built-in functions that do not be-
    gin with  two leading underscores. Currently, the
    functions affected include _exit, abort, abs, allo-
    ca, cos,  exit, fabs, labs, memcmp, memcpy, sin,
    sqrt, strcmp, strcpy, and strlen.

    The `-ansi' option prevents alloca and _exit from
    being builtin functions.

    -fno-strict-prototype
    Treat a function declaration with no arguments,
    such as `int foo ();', as C would treat it--as say-
    ing nothing about the number of arguments or their
    types (C++ only).  Normally, such a declaration in
    C++ means that the function foo takes no arguments.

    -trigraphs
    Support ANSI C trigraphs.  The `-ansi' option im-
    plies `-trigraphs'.

    -traditional
    Attempt to support some aspects of traditional C
    compilers. For details, see the GNU C Manual; the
    duplicate  list here has been deleted so that we
    won't get complaints when it is out of date.

    But one note about C++ programs only (not C).

GNU Tools    1993/10/13    7
GCC(1)     GNU Tools     GCC(1)


    `-traditional' has one additional effect for C++:
    assignment to this is permitted. This is the same
    as the effect of `-fthis-is-variable'.

    -traditional-cpp
    Attempt to support some aspects of traditional C
    preprocessors.  This includes the  items  that
    specifically mention the preprocessor above, but
    none of the other effects of `-traditional'.

    -fdollars-in-identifiers
    Permit the use of `$' in identifiers (C++ only).
    You can also use `-fno-dollars-in-identifiers' to
    explicitly prohibit use of `$'. (GNU C++ allows
    `$' by default on some target systems but not oth-
    ers.)

    -fenum-int-equiv
    Permit implicit conversion of int to enumeration
    types (C++ only). Normally GNU C++ allows conver-
    sion of enum to int, but not the other way around.

    -fexternal-templates
    Produce smaller code for template declarations, by
    generating only a  single  copy of each  template
    function where it is defined (C++ only). To use
    this option successfully, you must also mark all
    files that use templates with  either  `#pragma
    implementation' (the  definition)  or  `#pragma
    interface' (declarations).

    When   your code  is compiled   with
    `-fexternal-templates', all template instantiations
    are external.  You must arrange for all necessary
    instantiations to appear in the implementation
    file; you can do this with a typedef that refer-
    ences each instantiation needed. Conversely, when
    you  compile using  the default   option
    `-fno-external-templates', all template instantia-
    tions are explicitly internal.

    -fall-virtual
    Treat all possible member functions as virtual, im-
    plicitly.  All member functions (except for con-
    structor functions and new or delete member opera-
    tors) are treated as virtual functions of the class
    where they appear.

    This does not mean that all calls to these member
    functions will be made through the internal table
    of virtual functions. Under some circumstances,
    the compiler can determine that a call to  a given
    virtual function  can be made directly; in these
    cases the calls are direct in any case.

GNU Tools    1993/10/13    8
GCC(1)     GNU Tools     GCC(1)


    -fcond-mismatch
    Allow conditional expressions with mismatched types
    in the second and third arguments. The value of
    such an expression is void.

    -fthis-is-variable
    Permit assignment to this (C++ only). The incorpo-
    ration of user-defined free store management into
    C++ has made assignment to `this'  an anachronism.
    Therefore, by default it is invalid to assign to
    this within a class member function. However, for
    backwards compatibility, you can make it valid with
    `-fthis-is-variable'.

    -funsigned-char
    Let the type char be unsigned, like unsigned char.

    Each kind of machine has a default for what char
    should be. It is either like unsigned char by de-
    fault or like signed char by default.

    Ideally, a portable program should always use
    signed char or unsigned char when it depends on the
    signedness of an object. But many programs have
    been written to use plain char and expect it to be
    signed, or expect it to be unsigned, depending on
    the machines they were written for.  This option,
    and its inverse, let you make such a program work
    with the opposite default.

    The type char is always a distinct type from each
    of signed char and unsigned char, even though its
    behavior is always just like one of those two.

    -fsigned-char
    Let the type char be signed, like signed char.

    Note   that this  is equivalent   to
    `-fno-unsigned-char', which is the negative form of
    `-funsigned-char'. Likewise, `-fno-signed-char' is
    equivalent to `-funsigned-char'.

    -fsigned-bitfields

    -funsigned-bitfields

    -fno-signed-bitfields

    -fno-unsigned-bitfields
    These options control whether a bitfield is signed
    or unsigned, when declared with  no  explicit
    `signed' or `unsigned' qualifier.  By default, such
    a bitfield is signed, because this is consistent:
    the basic integer types such as int are signed

GNU Tools    1993/10/13    9
GCC(1)     GNU Tools     GCC(1)


    types.

    However, when you specify `-traditional', bitfields
    are all unsigned no matter what.

    -fwritable-strings
    Store string constants in the writable data segment
    and don't uniquize them. This is for compatibility
    with old programs which assume they can write into
    string constants.  `-traditional' also has this ef-
    fect.

    Writing into string constants is a very bad idea;
    "constants" should be constant.

PREPROCESSOR OPTIONS
    These options control the C preprocessor, which is run on
    each C source file before actual compilation.

    If you use the `-E' option, GCC does nothing except pre-
    processing. Some of these options make sense only togeth-
    er with `-E' because they cause the preprocessor output to
    be unsuitable for actual compilation.

    -include file
    Process file as input before processing the regular
    input file.  In  effect, the contents of file are
    compiled first. Any `-D' and `-U' options on the
    command line are always processed before `-include
    file', regardless of the order in  which they are
    written. All the `-include' and `-imacros' options
    are processed in the order in which they are writ-
    ten.

    -imacros file
    Process file as  input,  discarding the resulting
    output, before processing the regular input file.
    Because the output generated from file is discard-
    ed, the only effect of `-imacros file' is  to make
    the macros defined in file available for use in the
    main input. The preprocessor evaluates any `-D'
    and `-U'  options on the command line before pro-
    cessing `-imacrosfile', regardless of the order in
    which they are written.  All the `-include' and
    `-imacros' options are processed in the order in
    which they are written.

    -idirafter dir
    Add the directory dir to the second include path.
    The directories on the second include path are
    searched when a header file is not found in any of
    the directories in the main include path (the one
    that `-I' adds to).


GNU Tools    1993/10/13       10
GCC(1)     GNU Tools     GCC(1)


    -iprefix prefix
    Specify prefix  as the prefix for subsequent
    `-iwithprefix' options.

    -iwithprefix dir
    Add a directory to the second include path.  The
    directory's name  is made by concatenating prefix
    and dir, where prefix was specified previously with
    `-iprefix'.

    -nostdinc
    Do not search the standard system directories for
    header files. Only the directories you have speci-
    fied with `-I' options (and the current directory,
    if appropriate) are searched.

    By using both `-nostdinc' and `-I-', you can limit
    the include-file search file to only those directo-
    ries you specify explicitly.

    -nostdinc++
    Do not search for header files in the C++-specific
    standard directories, but do still search the other
    standard directories. (This option is used when
    building `libg++'.)

    -undef Do not predefine any nonstandard macros.  (Includ-
    ing architecture flags).

    -E   Run only the C preprocessor. Preprocess all the C
    source files specified and output the results to
    standard output or to the specified output file.

    -C   Tell the preprocessor not to discard comments.
    Used with the `-E' option.

    -P   Tell the preprocessor not to generate `#line' com-
    mands. Used with the `-E' option.

    -M [ -MG ]
    Tell the preprocessor to output a rule suitable for
    make describing the dependencies of each object
    file. For each source file, the preprocessor out-
    puts one make-rule whose target is the object file
    name for that source file  and whose dependencies
    are all the files `#include'd in it. This rule may
    be a single line or may be continued with  `\'-new-
    line if it is long. The list of rules is printed
    on standard output instead of the preprocessed C
    program.

    `-M' implies `-E'.

    `-MG' says to treat missing header files as gener-

GNU Tools    1993/10/13       11
GCC(1)     GNU Tools     GCC(1)


    ated files and assume they live in the same direc-
    tory as the source file. It must be specified in
    addition to `-M'.

    -MM [ -MG ]
    Like `-M' but the output mentions only the user
    header files included with `#include file"'. Sys-
    tem header files included  with `#include <file>'
    are omitted.

    -MD  Like `-M' but the dependency information is written
    to files with names made by replacing `.o' with
    `.d' at the end of the output file names. This is
    in  addition  to  compiling the  file  as
    specified--`-MD' does not inhibit ordinary compila-
    tion the way `-M' does.

    The Mach utility `md' can be used to merge the `.d'
    files into a single dependency file suitable for
    using with the `make' command.

    -MMD  Like `-MD' except mention only user header files,
    not system header files.

    -H   Print the name of each header file used, in addi-
    tion to other normal activities.

    -Aquestion(answer)
    Assert the answer answer for question, in  case it
    is tested with a preprocessor conditional such as
    `#if #question(answer)'. `-A-' disables the stan-
    dard assertions that normally describe the target
    machine.

    -Aquestion
    (answer) Assert the answer answer for question, in
    case it is tested with a preprocessor conditional
    such as `#if #question(answer)'.  `-A-'  disables
    the standard assertions that normally describe the
    target machine.

    -Dmacro
    Define macro macro with the string `1' as its defi-
    nition.

    -Dmacro=defn
    Define macro macro as defn.  All instances of
    `-D' on the command line are processed before any
    `-U' options.

    -Umacro
    Undefine macro macro. `-U' options are evaluated
    after all `-D' options, but before any `-include'
    and `-imacros' options.

GNU Tools    1993/10/13       12
GCC(1)     GNU Tools     GCC(1)


    -dM  Tell the preprocessor to output only a list of the
    macro definitions that are in effect at the end of
    preprocessing. Used with the `-E' option.

    -dD  Tell the preprocessor to pass all macro definitions
    into the output, in their proper sequence in the
    rest of the output.

    -dN  Like `-dD' except that the macro arguments and con-
    tents are omitted. Only `#define name' is included
    in the output.

ASSEMBLER OPTION
    -Wa,option
    Pass option as an option to the assembler. If op-
    tion contains commas, it is split into multiple op-
    tions at the commas.

LINKER OPTIONS
    These options come into play when the compiler links ob-
    ject files into an executable output file. They are mean-
    ingless if the compiler is not doing a link step.

    object-file-name
    A  file name that does not end in a special recog-
    nized suffix is considered to name an object file
    or library.  (Object files are distinguished from
    libraries by the linker according to the file con-
    tents.) If GCC  does a link step, these object
    files are used as input to the linker.

    -llibrary
    Use the library named library when linking.

    The linker searches a standard list of directories
    for the library, which  is actually a file named
    `liblibrary.a'. The linker then uses this file as
    if it had been specified precisely by name.

    The directories searched include several standard
    system directories plus any that you specify with
    `-L'.

    Normally the files found this  way are library
    files--archive files whose members are  object
    files. The linker handles an archive file by scan-
    ning through it for members which define symbols
    that have so far been referenced but not defined.
    However, if the linker finds an  ordinary object
    file rather than a library, the object file is
    linked in the usual fashion. The  only difference
    between using an `-l' option and specifying a file
    name is that `-l' surrounds library with `lib' and
    `.a' and searches several directories.

GNU Tools    1993/10/13       13
GCC(1)     GNU Tools     GCC(1)


    -lobjc You need this special case of the -l option in or-
    der to link an Objective C program.

    -nostartfiles
    Do not use the standard system startup files when
    linking. The standard libraries are used normally.

    -nostdlib
    Don't use the standard system libraries and startup
    files when linking.  Only the files you specify
    will be passed to the linker.

    -static
    On systems that support dynamic linking, this pre-
    vents linking with the shared libraries.  On other
    systems, this option has no effect.

    -shared
    Produce a shared object which can  then be linked
    with other objects to form an executable. Only a
    few systems support this option.

    -symbolic
    Bind references to global symbols when building a
    shared object. Warn about any unresolved refer-
    ences (unless overridden by the link editor option
    `-Xlinker  -z -Xlinker defs'). Only a few systems
    support this option.

    -Xlinker option
    Pass option as an option to the linker.  You can
    use this  to supply system-specific linker options
    which GNU CC does not know how to recognize.

    If you want to pass an option that takes an argu-
    ment, you must use `-Xlinker' twice, once for the
    option and once for the argument.  For example, to
    pass `-assert definitions', you must write `-Xlink-
    er -assert -Xlinker definitions'.  It does not work
    to write `-Xlinker "-assert definitions"', because
    this passes the entire string as a single argument,
    which is not what the linker expects.

    -Wl,option
    Pass option as an option to the linker. If option
    contains commas, it is split into multiple options
    at the commas.

    -u symbol
    Pretend the symbol symbol is undefined, to force
    linking of library modules to define it.  You can
    use `-u'  multiple times with different symbols to
    force loading of additional library modules.


GNU Tools    1993/10/13       14
GCC(1)     GNU Tools     GCC(1)


DIRECTORY OPTIONS
    These options specify directories to search for header
    files, for libraries and for parts of the compiler:

    -Idir Append directory  dir to the list of directories
    searched for include files.

    -I-  Any directories you specify with `-I' options be-
    fore the  `-I-' option are searched only for the
    case of `#include "file"'; they are not  searched
    for `#include <file>'.

    If additional directories are specified with `-I'
    options after the `-I-', these  directories are
    searched for all `#include' directives. (Ordinari-
    ly all `-I' directories are used this way.)

    In addition, the `-I-' option inhibits the use of
    the current directory (where the current input file
    came from) as the first search directory for `#in-
    clude "file"'. There is no way to override this
    effect of `-I-'.  With  `-I.' you can specify
    searching  the directory which was current when the
    compiler was invoked. That is not exactly the same
    as what the preprocessor does by default, but it is
    often satisfactory.

    `-I-' does not inhibit the use of the standard sys-
    tem directories for header files. Thus, `-I-' and
    `-nostdinc' are independent.

    -Ldir Add directory dir to the list of directories to be
    searched for `-l'.

    -Bprefix
    This option specifies where to find the executa-
    bles, libraries and data files of the compiler it-
    self.

    The compiler driver program runs one or more of the
    subprograms `cpp', `cc1' (or, for C++, `cc1plus'),
    `as' and  `ld'.  It tries prefix as a prefix for
    each program it tries to run, both with and without
    `machine/version/'.

    For each subprogram to be run, the compiler driver
    first tries the `-B' prefix, if any. If that name
    is not found, or if `-B' was not specified, the
    driver tries two standard prefixes, which are
    `/usr/lib/gcc/' and `/usr/local/lib/gcc-lib/'. If
    neither of those results in a file name  that is
    found, the compiler driver searches for the unmodi-
    fied program name, using the directories specified
    in your `PATH' environment variable.

GNU Tools    1993/10/13       15
GCC(1)     GNU Tools     GCC(1)


    The  run-time support file `libgcc.a'  is also
    searched for using the `-B' prefix, if needed.  If
    it is not found there, the two standard prefixes
    above are tried, and that is all.  The file is left
    out of the link if it is not found by those means.
    Most of the time, on most machines, `libgcc.a' is
    not actually necessary.

    You can get a similar result from the environment
    variable GCC_EXEC_PREFIX; if it is defined, its
    value is used as a prefix in the same way. If both
    the `-B' option and the GCC_EXEC_PREFIX  variable
    are present, the `-B' option is used first and the
    environment variable value second.

WARNING OPTIONS
    Warnings are diagnostic messages that report constructions
    which are not inherently erroneous but which are risky or
    suggest there may have been an error.

    These options control the amount  and kinds of  warnings
    produced by GNU CC:

    -fsyntax-only
    Check the code for syntax errors, but don't emit
    any output.

    -w   Inhibit all warning messages.

    -Wno-import
    Inhibit warning messages about the use of  #import.

    -pedantic
    Issue all the warnings  demanded by strict ANSI
    standard C; reject all programs that use forbidden
    extensions.

    Valid ANSI standard C programs should compile prop-
    erly with or without this option (though a rare few
    will require `-ansi'). However, without this op-
    tion, certain GNU extensions and traditional C fea-
    tures are supported as  well. With this option,
    they are rejected. There is no reason to use this
    option; it exists only to satisfy pedants.

    `-pedantic' does not cause warning messages for use
    of the alternate keywords whose names begin and end
    with `__'. Pedantic warnings are also disabled in
    the expression that follows __extension__.  Howev-
    er, only  system header files should use these es-
    cape routes; application programs should avoid
    them.

GNU Tools    1993/10/13       16
GCC(1)     GNU Tools     GCC(1)


    -pedantic-errors
    Like `-pedantic', except that errors are produced
    rather than warnings.

    -W   Print extra warning messages for these events:

  o  A nonvolatile automatic variable might be changed
    by a call to longjmp. These warnings are possible
    only in optimizing compilation.

    The compiler sees only the calls  to setjmp.  It
    cannot know where longjmp will be called; in fact,
    a signal handler could call it at any point in the
    code. As a result, you may get a warning even when
    there is in fact no problem because longjmp cannot
    in fact be called at the place which would cause a
    problem.

  o  A function can return either with or without a val-
    ue.  (Falling off the end of the function body is
    considered returning without a value.)  For exam-
    ple, this function would evoke such a warning:

    foo (a)
    {
  if (a > 0)
   return a;
    }

    Spurious warnings can occur because GNU CC does not
    realize that certain functions (including abort and
    longjmp) will never return.

  o  An expression-statement or the left-hand side of a
    comma expression contains no side effects. To sup-
    press the warning, cast the unused expression to
    void. For example, an expression such as  `x[i,j]'
    will cause a warning, but `x[(void)i,j]' will not.

  o  An unsigned value is compared against zero with `>'
    or `<='.


    -Wimplicit
    Warn whenever a function or parameter is implicitly
    declared.

    -Wreturn-type
    Warn whenever a function is defined with a return-
    type that defaults to int. Also warn about any re-
    turn statement with no return-value in a  function
    whose return-type is not void.

GNU Tools    1993/10/13       17
GCC(1)     GNU Tools     GCC(1)


    -Wunused
    Warn whenever a local variable is unused aside from
    its declaration, whenever a function is  declared
    static but never defined, and whenever a statement
    computes a result that is explicitly not used.

    -Wswitch
    Warn whenever a switch statement has an index of
    enumeral type and lacks a case for one or more of
    the named codes of that enumeration. (The presence
    of a default label prevents this warning.) case
    labels outside the enumeration range also provoke
    warnings when this option is used.

    -Wcomment
    Warn whenever a comment-start sequence `/*' appears
    in a comment.

    -Wtrigraphs
    Warn if any trigraphs are encountered (assuming
    they are enabled).

    -Wformat
    Check calls to printf and scanf, etc., to make sure
    that the arguments supplied have types appropriate
    to the format string specified.

    -Wchar-subscripts
    Warn if an array subscript has type char. This is
    a common cause of error, as programmers often for-
    get that this type is signed on some machines.

    -Wuninitialized
    An automatic variable is used without first being
    initialized.

    These warnings are possible only in optimizing com-
    pilation,  because they require data flow informa-
    tion that is computed only when optimizing. If you
    don't specify `-O', you simply won't get these
    warnings.

    These warnings occur only for variables that are
    candidates for register  allocation.  Therefore,
    they do not occur for a variable that is  declared
    volatile,  or whose address is taken, or whose size
    is other than 1, 2, 4 or 8 bytes.  Also,  they do
    not occur for structures, unions or arrays, even
    when they are in registers.

    Note that there may be no warning about a  variable
    that is used only to compute a value that itself is
    never used, because such computations may be delet-
    ed by data flow analysis before the warnings are

GNU Tools    1993/10/13       18
GCC(1)     GNU Tools     GCC(1)


    printed.

    These warnings are made optional because GNU CC is
    not smart enough to see all the reasons why the
    code might be correct despite appearing to have an
    error. Here is one example of how this can happen:

    {
  int x;
  switch (y)
   {
   case 1: x = 1;
    break;
   case 2: x = 4;
    break;
   case 3: x = 5;
   }
  foo (x);
    }

    If the value of y is always 1, 2 or 3, then x is
    always initialized, but GNU CC doesn't know this.
    Here is another common case:

    {
  int save_y;
  if (change_y) save_y = y, y = new_y;
  ...
  if (change_y) y = save_y;
    }

    This has no bug because save_y is used only if it
    is set.

    Some spurious warnings can be avoided if you de-
    clare as volatile all the functions you use that
    never return.

    -Wparentheses
    Warn if parentheses are omitted in certain con-
    texts.

    -Wtemplate-debugging
    When using templates in a C++ program, warn if de-
    bugging is not yet fully available (C++ only).

    -Wall All of the above `-W' options combined. These are
    all the options which pertain to usage that we rec-
    ommend avoiding and that we believe is easy to
    avoid, even in conjunction with macros.

    The remaining `-W...' options are not implied by `-Wall'
    because they warn about constructions that we consider
    reasonable to use, on occasion, in clean programs.

GNU Tools    1993/10/13       19
GCC(1)     GNU Tools     GCC(1)


    -Wtraditional
    Warn about certain constructs that behave differ-
    ently in traditional and ANSI C.

  o  Macro arguments occurring within string constants
    in the macro body. These would substitute the ar-
    gument in traditional C, but are part of the con-
    stant in ANSI C.

  o  A function declared external in one block and then
    used after the end of the block.

  o  A switch statement has an operand of type long.


    -Wshadow
    Warn whenever a local variable shadows another lo-
    cal variable.

    -Wid-clash-len
    Warn whenever two distinct identifiers match in the
    first len characters. This may help you prepare a
    program that will compile  with certain obsolete,
    brain-damaged compilers.

    -Wpointer-arith
    Warn about anything that depends on the "size of" a
    function type or of void.  GNU C assigns these
    types a size of 1, for convenience in calculations
    with void * pointers and pointers to functions.

    -Wcast-qual
    Warn whenever a pointer is cast so as to remove a
    type qualifier from the target type. For example,
    warn if a const char * is cast to an ordinary char
    *.

    -Wcast-align
    Warn whenever a pointer is cast such that the re-
    quired alignment of the target is  increased.  For
    example, warn if a char * is cast to an int * on
    machines where integers can only  be accessed at
    two- or four-byte boundaries.

    -Wwrite-strings
    Give string constants the type const char[length]
    so that copying the address of one into a non-const
    char * pointer will get a warning. These warnings
    will help you find at compile time code that can
    try to write into a string constant, but only if
    you have been very careful about  using const in
    declarations and  prototypes.  Otherwise, it will
    just be a nuisance; this is why we did not make
    `-Wall' request these warnings.

GNU Tools    1993/10/13       20
GCC(1)     GNU Tools     GCC(1)


    -Wconversion
    Warn if a prototype causes a type conversion that
    is different from what would happen to the same ar-
    gument in the absence of a prototype.  This in-
    cludes conversions of fixed point to floating and
    vice versa, and conversions changing the width or
    signedness of a fixed point argument except when
    the same as the default promotion.

    -Waggregate-return
    Warn if any functions that return structures or
    unions are defined or called. (In languages where
    you can return an array, this also elicits a warn-
    ing.)

    -Wstrict-prototypes
    Warn if a function is declared or  defined without
    specifying the argument types. (An old-style func-
    tion definition is permitted without a warning if
    preceded by a declaration which specifies the argu-
    ment types.)

    -Wmissing-prototypes
    Warn if a global function is defined without a pre-
    vious prototype declaration. This warning is is-
    sued even if the definition itself provides a pro-
    totype. The aim is to detect global functions that
    fail to be declared in header files.

    -Wmissing-declarations
    Warn if a global function is defined without a pre-
    vious declaration.  Do so even if the definition
    itself provides a prototype. Use  this option to
    detect global functions  that are not declared in
    header files.

    -Wredundant-decls
    Warn if anything is declared more than once in the
    same scope, even in cases where multiple declara-
    tion is valid and changes nothing.

    -Wnested-externs
    Warn if an extern declaration is encountered within
    an function.

    -Wenum-clash
    Warn about conversion between different enumeration
    types (C++ only).

    -Woverloaded-virtual
    (C++ only.) In a derived class, the definitions of
    virtual functions must match the type signature of
    a virtual function declared in the base class. Use
    this option to request  warnings when a derived

GNU Tools    1993/10/13       21
GCC(1)     GNU Tools     GCC(1)


    class declares a function that may be an erroneous
    attempt to define a virtual function: that is, warn
    when a function with the same name as a virtual
    function in the base class, but with a type signa-
    ture that doesn't match any virtual functions from
    the base class.

    -Winline
    Warn if a function can not be inlined, and either
    it was declared as inline, or  else the -fin-
    line-functions option was given.

    -Werror
    Treat warnings as errors; abort compilation after
    any warning.

DEBUGGING OPTIONS
    GNU CC has various special options that are used  for de-
    bugging either your program or GCC:

    -g   Produce debugging information in the operating sys-
    tem's native format (stabs, COFF, XCOFF, or DWARF).
    GDB can work with this debugging information.

    On most systems that use stabs format, `-g' enables
    use of extra debugging information that only GDB
    can use;  this extra information makes debugging
    work better in GDB but will probably make other de-
    buggers crash or refuse to read the program. If
    you want to control for certain whether to generate
    the extra information, use `-gstabs+', `-gstabs',
    `-gxcoff+', `-gxcoff', `-gdwarf+', or `-gdwarf'
    (see below).

    Unlike most other C compilers, GNU CC allows you to
    use `-g' with `-O'. The shortcuts taken by opti-
    mized code may occasionally produce surprising re-
    sults: some variables you declared may not exist at
    all; flow of control may briefly move where you did
    not expect it; some statements may not be  executed
    because they compute constant results or their val-
    ues were already at hand; some statements may exe-
    cute in different places because they were moved
    out of loops.

    Nevertheless it proves possible to debug optimized
    output. This makes it reasonable to use the opti-
    mizer for programs that might have bugs.

    The following options are useful when GNU CC is generated
    with the capability for more than one debugging format.

    -ggdb Produce debugging information in the native format
    (if that is supported), including GDB extensions if

GNU Tools    1993/10/13       22
GCC(1)     GNU Tools     GCC(1)


    at all possible.

    -gstabs
    Produce debugging information in stabs format (if
    that is supported), without GDB extensions.  This
    is the format used by DBX on most BSD systems.

    -gstabs+
    Produce debugging information in stabs format (if
    that is supported), using GNU extensions understood
    only by the GNU debugger (GDB).  The use of these
    extensions is likely to make other debuggers crash
    or refuse to read the program.

    -gcoff Produce debugging information in COFF format (if
    that is supported). This is the format used by SDB
    on most System V systems prior to System V Release
    4.

    -gxcoff
    Produce debugging information in XCOFF format (if
    that is supported). This is the format used by the
    DBX debugger on IBM RS/6000 systems.

    -gxcoff+
    Produce debugging information in XCOFF format (if
    that is supported), using GNU extensions understood
    only by the GNU debugger (GDB). The use of these
    extensions is likely to make other debuggers crash
    or refuse to read the program.

    -gdwarf
    Produce debugging information in DWARF format (if
    that is supported). This is the format used by SDB
    on most System V Release 4 systems.

    -gdwarf+
    Produce debugging information in DWARF format (if
    that is supported), using GNU extensions understood
    only by the GNU debugger (GDB). The use of these
    extensions is likely to make other debuggers crash
    or refuse to read the program.

    -glevel
    -ggdblevel
    -gstabslevel
    -gcofflevel -gxcofflevel

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有