Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1035971
  • 博文数量: 243
  • 博客积分: 3053
  • 博客等级: 中校
  • 技术积分: 2975
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-02 21:11
文章分类

全部博文(243)

文章存档

2013年(2)

2012年(20)

2011年(5)

2010年(114)

2009年(102)

我的朋友

分类:

2009-05-17 21:34:56

前言

  编译器在编译过程中,先将程式码编译成 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.

阅读(659) | 评论(0) | 转发(0) |
0

上一篇:C++类型转换

下一篇:编写可重入函数

给主人留下些什么吧!~~