• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • GCC 手冊(續完)

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    end 下面的`-m'選項用于 MI PS家族的計算機: -mcpu=cpu-type 生成指令的時候,假設默認的機器類型是cpu-type .默認情況下的cpu-type是 defa ult, G CC 將選取任何機型上都是最長周期時間的指令,這樣才能使代碼在所有的MIP S處理器上以合理 的速度運行. cpu-typ
    end

    下面的`-m'選項用于MIPS家族的計算機:

    -mcpu=cpu-type

    生成指令的時候,假設默認的機器類型是cpu-type .默認情況下的cpu-type是 defa
    ult, GCC將選取任何機型上都是最長周期時間的指令,這樣才能使代碼在所有的MIP
    S處理器上以合理 的速度運行. cpu-type的其他選擇是r2000, r3000, r4000,和 r
    6000.雖然選定某個cpu-type后, GCC將針對選定的芯片安排對應的工作,但是如果
    不指定?? -mips2或-mips3選項,編譯器不會輸出任何不符合MIPS ISA (instructio
    n set architecture)一級的代碼.

    -mips2

    輸出MIPS ISA二級指令(可能的擴展,如平方根指令). -mcpu=r4000或-mcpu=r6000
    選項必須和-mips2聯用.

    -mips3

    輸出MIPS ISA三級指令(64位指令). -mcpu=r4000選項必須和-mips2聯用. (譯注:疑
    為-mips3)

    -mint64

    -mlong64

    -mlonglong128

    這些選項目前不起作用.

    -mmips-as

    產生用于MIPS匯編器的代碼,同時使用mips-tfile添加普通的調試信息.對于大多數
    平臺這是 默認選項,除了OSF/1參考平臺,它使用OSF/rose目標格式.如果打開了任一
    個-ggdb, -gstabs,或-gstabs+選項開關, mips-tfile程序就把stab封裝在MIPS EC
    OFF里面.

    -mgas

    產生用于GNU匯編器的代碼.在OSF/1參考平臺上這是默認選項,它使用OSF/rose目標
    格式.

    -mrnames

    -mno-rnames

    -mrnames開關選項告訴輸出代碼使用MIPS軟件名稱說明寄存器,而不是硬件名稱(就
    是說,用 a0代替). GNU匯編器不支持-mrnames選項,而MIPS匯編器則運行MIPS C預
    處理器處理源文件. -mno-rnames是默認選項.

    -mgpopt

    -mno-gpopt

    -mgpopt開關選項要求在正文段中把所有的數據聲明寫到指令前面,使各種MIPS匯編
    器對短類型全局 或靜態數據項(short global or static data items)輸出單字內
    存訪問而不是雙字內存訪問.當打開編譯優化 時,這是默認功能.

    -mstats

    -mno-stats

    每次處理完非嵌入函數(non-inline function)后, -mstats開關選項使編譯器向標
    準錯誤文件 輸出一行關于程序的統計資料(保存的寄存器數目,堆棧大小,等等).

    -mmemcpy

    -mno-memcpy

    -mmemcpy開關選項使所有的塊移動操作調用適當的string函數(memcpy或 bcopy),而
    不是生成嵌入代碼.

    -mmips-tfile

    -mno-mips-tfile

    當MIPS匯編器生成mips-tfile文件(用于幫助調試)后, -mno-mips-tfile 開關選項
    阻止編譯器使用mips-tfile后期處理(postprocess)目標文件.不運行 mips-tfile就
    沒有調試器關注的局部變量.另外, stage2和stage3目標文件將把 臨時文件名傳遞
    給匯編器,嵌在目標文件中,這意味著不比較目標文件是否相同.

    -msoft-float

    輸出包含浮點庫調用. 警告: 所需庫不是GNU CC的一部分.一般說來使用該機型本地
    C編譯器的相應部件, 但是不能直接用于交叉編譯,你必須自己安排,提供交叉編譯適
    用的庫函數.

    -mhard-float

    輸出包含浮點指令.如果編譯器沒有被改動,這就是默認選項.

    -mfp64

    編譯器認為狀態字的FR置位(on),也就是說存在32 64-bit浮點寄存器,而不是32 32
    -bit 浮點寄存器.同時必須打開-mcpu=r4000和-mips3開關.

    -mfp32

    認為存在32 32-bit浮點寄存器.這是默認選項.

    -mabicalls

    -mno-abicalls

    輸出(或不輸出) .abicalls, .cpload,和.cprestore偽指令,某些 System V.4版本
    用于位置無關代碼.

    -mhalf-pic

    -mno-half-pic

    -mhalf-pic開關選項要求把外部引用的指針放到數據段,并且載入內存,而不放到正
    文段.該選項目前 不起作用.

    -G num

    把小于等于num字節的全局或靜態數據放到小的數據段或bss段,而不是普通的數據段
    或bss段. 這樣匯編器可以輸出基于全局指針(gp或Cool,的單字內存訪問指令而非普
    通的雙字指令.默認情況下, 用MIPS匯編器時num是8,而GNU匯編器則為0.另外, -Gn
    um選項也被傳遞 給匯編器和連接器.所有的模塊必須在相同的-Gnum值下編譯.

    -nocpp

    匯編用戶匯編文件(帶有`.s'后綴)時,告訴MIPS匯編器不要運行預處理器.

    下面的`-m'選項用于Intel 80386族計算機: -m486

    -mno-486

    控制是否生成對486優化的代碼.

    -msoft-float

    輸出包含浮點庫調用. 警告: 所需庫不是GNU CC的一部分.一般說來使用該機型本地
    C編譯器的相應部件, 但是不能直接用于交叉編譯,你必須自己安排,提供交叉編譯適
    用的庫函數.

    在函數把浮點返回值放在80387寄存器棧的機器上,即使設置了`-msoft-float'選項
    ,也可能會發出 一些浮點操作碼.

    -mno-fp-ret-in-387

    不用FPU寄存器返回函數值.

    通常函數調用約定把float和double的返回值放在FPU寄存器中,即使不存在FPU. 這
    種作法的理念是操作系統應該仿真出FPU.

    而`-mno-fp-ret-in-387'選項使浮點值通過普通的CPU寄存器返回.

    下面的`-m'選項用于HPPA族計算機:

    -mpa-risc-1-0

    生成PA 1.0處理器的目標碼.

    -mpa-risc-1-1

    生成PA 1.1處理器的目標碼.

    -mkernel

    生成適用于內核的目標碼.特別要避免add指令,它有一個參數是DP寄存器;用addil
    代替add指令.這樣可以避免HP-UX連接器的某個嚴重bug.

    -mshared-libs

    生成能夠連接HP-UX共享庫的目標碼.該選項還沒有實現全部功能,對PA目標默認為關
    閉.使用這個選項會導致 編譯器生成錯誤的目標碼.

    -mno-shared-libs

    不生成連接HP-UX共享庫的目標碼.這是PA目標的默認選項.

    -mlong-calls

    生成的目標碼允許同一個源文件中的函數調用,調用點和被調函數的距離可以超過2
    56K之遠.不需要打開這個開關選項, 除非連接器給出``branch out of range erro
    rs``這樣的錯誤.

    -mdisable-fpregs

    防止任何情況下使用浮點寄存器.編譯內核需要這個選項,內核切換浮點寄存器的執
    行環境速度非常緩慢.如果打開了這個 開關選項同時試圖浮點操作,編譯將失敗.

    -mdisable-indexing

    防止編譯器使用索引地址模式(indexing address mode).這樣在MACH上編譯MIG生成
    的代碼時,可以 避免一些非?;逎膯栴}.

    -mtrailing-colon

    在標記定義(label definition)的末尾添加一個冒號(用于ELF匯編器).

    下面的`-m'選項用于Intel 80960族計算機:

    -mcpu-type

    默認機器類型為cpu-type ,使編譯器產生對應的指令,地址模式和內存對齊.默認的
    cpu-type是kb;其他選擇有ka, mc, ca, cf, sa,和sb.

    -mnumerics

    -msoft-float

    -mnumerics開關選項指出處理器不支持浮點指令. -msoft-float開關選項指出不應
    該認為 機器支持浮點操作.

    -mleaf-procedures

    -mno-leaf-procedures

    企圖(或防止)改變葉過程(leaf procedure),使其可被bal指令以及call指令 調用.
    對于直接函數調用,如果bal指令能夠被匯編器或連接器替換,這可以產生更有效的代
    碼,但是其他情況下 產生較低效的代碼,例如通過函數指針調用函數,或使用了不支
    持這種優化的連接器.

    -mtail-call

    -mno-tail-call

    執行(或不執行)更多的嘗試(除過編譯器那些機器無關部分),優化進入分支的尾遞歸
    (tail-recursive)調用.你 可能不需要這個,因為檢測什么地方無效沒有全部完成.
    默認開關是-mno-tail-call.

    -mcomplex-addr

    -mno-complex-addr

    認為(或不認為)在當前的i960設備上,值得使用復合地址模式(complex addressing
    mode).復合地址模式 可能不值得用到K系列,但是一定值得用在C系列.目前除了CB
    和CC處理器,其他處理器上 -mcomplex-addr是默認選項.

    -mcode-align

    -mno-code-align

    把目標碼對齊到8字節邊界上(或者不必),這樣讀取會快一些.目前只對C系列默認打
    開.

    -mic-compat

    -mic2.0-compat

    -mic3.0-compat

    兼容iC960 v2.0或v3.0.

    -masm-compat

    -mintel-asm

    兼容iC960匯編器.

    -mstrict-align

    -mno-strict-align

    不允許(或允許)邊界不對齊的訪問.

    -mold-align

    使結構對齊(structure-alignment)兼容Intel的gcc發行版本1.3 (基于gcc 1.37).
    目前 這個選項有點問題,因為#pragma align 1總是作同樣的設定,而且無法關掉.


    下面的`-m'選項用于DEC Alpha設備:

    -mno-soft-float

    -msoft-float

    使用(或不使用)硬件浮點指令進行浮點運算.打開-msoft-float時,將使用 `libgcc
    1.c'中的函數執行浮點運算.除非它們被仿真浮點操作的例程替換,或者類似,它們被
    編譯為調用 仿真例程,這些例程將發出浮點操作.如果你為不帶浮點操作的Alpha編
    譯程序,你必須確保建立了這個庫,以便不調用 仿真例程.

    注意,不帶浮點操作的Alpha也要求擁有浮點寄存器.

    -mfp-reg

    -mno-fp-regs

    生成使用(或不使用)浮點寄存器群的目標代碼. -mno-fp-regs包含有-msoft-float
    開關選項.如果不使用浮點寄存器,浮點操作數就象整數一樣通過整數寄存器傳送,
    浮點運算結果放到而不是$f0.這是非標準 調用,因此任何帶有浮點參數或返回值
    的函數,如果被-mno-fp-regs開關編譯過的目標碼調用,它也必須 用這個選項編譯.


    這個選項的典型用法是建立內核,內核不使用任何浮點寄存器,因此沒必要保存和恢
    復這些寄存器.

    下面附加的選項出現在System V第四版中,用于兼容這些系統中的其他編譯器:

    -G

    在SVr4系統中, gcc出于兼容接受了`-G'選項(然后傳遞給連接器).可是我們建議使
    用 `-symbolic'或`-shared'選項,而不在gcc命令行上出現連接選項.

    -Qy

    驗證編譯器用的工具的版本,輸出到.ident匯編指令.

    -Qn

    制止輸出端的.ident指令(默認選項).

    -YP,dirs

    對于`-l'指定的庫文件,只搜索dirs.你可以在dirs中用冒號隔開各個 目錄項.

    -Ym,dir

    在dir目錄中尋找M4預處理器.匯編器使用這個選項.



    代碼生成選項(CODE GENERATION OPTION)

    下面的選項和平臺無關,用于控制目標碼生成的接口約定.

    大部分選項以`-f'開始.這些選項擁有確定和否定兩種格式; `-ffoo'的否定格式是
    `-fno-foo'.后面的描述將只列舉其中的一個格式---非默認的格式.你可以通過添
    加或去掉 `no-'推測出另一個格式.

    -fnonnull-objects

    假設通過引用(reference)取得的對象不為null (僅C++).

    一般說來, GNU C++對通過引用取得的對象作保守假設.例如,編譯器一定會檢查下似
    代碼中的a不為 null:

    obj &a = g (); a.f (2);

    檢查類似的引用需要額外的代碼,然而對于很多程序是不必要的.如果你的程序不要
    求這種檢查,你可以用 `-fnonnull-objects'選項忽略它.

    -fpcc-struct-return

    函數返回struct和union值時,采用和本地編譯器相同的參數約定.對于較小的結構,
    這種約定的效率偏低,而且很多機器上不能重入;它的優點是允許GCC編譯的目標碼
    和PCC編譯的目標碼互相調用.

    -freg-struct-return

    一有可能就通過寄存器返回struct和union函數值.對于較小的結構,它比 -fpcc-st
    ruct-return更有效率.

    如果既沒有指定-fpcc-struct-return ,也沒有指定-freg-struct-return, GNU CC
    默認使用目標機的標準約定.如果沒有標準約定, GNU CC默認采用-fpcc-struct-re
    turn.

    -fshort-enums

    給enum類型只分配它聲明的值域范圍的字節數.就是說, enum類型等于大小足夠的
    最小整數類型.

    -fshort-double

    使double類型的大小和float一樣.

    -fshared-data

    要求編譯結果的數據和非const變量是共享數據,而不是私有數據.這種差別僅在某些
    操作系統上面有意義, 那里的共享數據在同一個程序的若干進程間共享,而私有數據
    在每個進程內都有副件.

    -fno-common

    即使未初始化的全局變量也分配在目標文件的bss段,而不是把它們當做普通塊(com
    mon block)建立.這樣的 結果是,如果在兩個不同的編譯結果中聲明了同一個變量(
    沒使用extern ),連接它們時會產生錯誤. 這個選項可能有用的唯一情況是,你希望
    確認程序能在其他系統上運行,而其他系統總是這么做.

    -fno-ident

    忽略`#ident'指令.

    -fno-gnu-linker

    不要把全局初始化部件(如C++的構造子和解構子)輸出為GNU連接器使用的格式(在G
    NU連接器是標準方法的系統 上).當你打算使用非GNU連接器的時候可以用這個選項
    ,非GNU連接器也需要collect2程序確保系統連接器 放入構造子(constructor)和解
    構子(destructor). (GNU CC的發布包中包含有collect2 程序.)對于必須使用coll
    ect2的系統,編譯器驅動程序gcc自動配置為這么做.

    -finhibit-size-directive

    不要輸出.size匯編指令,或其他類似指令,當某個函數一分為二,兩部分在內存中距
    離很遠時會引起問題. 當編譯`crtstuff.c'時需要這個選項;其他情況下都不應該使
    用.

    -fverbose-asm

    輸出匯編代碼時放些額外的注釋信息.這個選項僅用于確實需要閱讀匯編輸出的時候
    (可能調試編譯器自己的時候).

    -fvolatile

    使編譯器認為所有通過指針訪問的內存是易變內存(volatile).

    -fvolatile-global

    使編譯器認為所有的外部和全局變量是易變內存.

    -fpic

    如果支持這種目標機,編譯器就生成位置無關目標碼.適用于共享庫(shared librar
    y).

    -fPIC

    如果支持這種目標機,編譯器就輸出位置無關目標碼.適用于動態連接(dynamic lin
    king),即使分支需要大范圍 轉移.

    -ffixed-reg

    把名為reg的寄存器按固定寄存器看待(fixed register);生成的目標碼不應該引用
    它(除了或許 用作棧指針,幀指針,或其他固定的角色).

    reg必須是寄存器的名字.寄存器名字取決于機器,用機器描述宏文件的REGISTER_NA
    MES宏 定義.

    這個選項沒有否定格式,因為它列出三路選擇.

    -fcall-used-reg

    把名為reg的寄存器按可分配寄存器看待,不能在函數調用間使用.可以臨時使用或當
    做變量使用,生存期 不超過一個函數.這樣編譯的函數無需保存和恢復reg寄存器.


    如果在可執行模塊中,把這個選項說明的寄存器用作固定角色將會產生災難性結果,
    如棧指針或幀指針.

    這個選項沒有否定格式,因為它列出三路選擇.

    -fcall-saved-reg

    把名為reg的寄存器按函數保護的可分配寄存器看待.可以臨時使用或當做變量使用
    ,它甚至能在函數間 生存.這樣編譯的函數會保存和恢復使用中的reg寄存器.

    如果在可執行模塊中,把這個選項說明的寄存器用作固定角色將會產生災難性結果,
    如棧指針或幀指針.

    另一種災難是用這個選項說明的寄存器返回函數值.

    這個選項沒有否定格式,因為它列出三路選擇.



    PRAGMAS

    GNU C++支持兩條`#pragma'指令使同一個頭文件有兩個用途:對象類的接口定義, 對
    象類完整的內容定義.

    #pragma interface

    (僅對C++)在定義對象類的頭文件中,使用這個指令可以節省大部分采用該類的目標
    文件的大小.一般說來,某些信息 (內嵌成員函數的備份副件,調試信息,實現虛函數
    的內部表格等)的本地副件必須保存在包含類定義的各個目標文件中.使用這個 pra
    gma指令能夠避免這樣的復制.當編譯中引用包含`#pragma interface'指令的頭文件
    時,就 不會產生這些輔助信息(除非輸入的主文件使用了`#pragma implementation
    '指令).作為替代,目標文件 將包含可被連接時解析的引用(reference).

    #pragma implementation

    #pragma implementation "objects.h"

    (僅對C++)如果要求從頭文件產生完整的輸出(并且全局可見),你應該在主輸入文件
    中使用這條pragma.頭文件 中應該依次使用`#pragma interface'指令.在implemen
    tation文件中將產生全部內嵌成員函數 的備份,調試信息,實現虛函數的內部表格等


    如果`#pragma implementation'不帶參數,它指的是和源文件有相同基本名的包含文
    件;例如, `allclass.cc'中, `#pragma implementation'等于`#pragma implement
    ation allclass.h'.如果某個implementation文件需要從多個頭文件引入代碼,就應
    該 使用這個字符串參數.

    不可能把一個頭文件里面的內容分割到多個implementation文件中.



    文件(FILE)

    file.c C源文件

    file.h C頭文件(預處理文件)

    file.i 預處理后的C源文件

    file.C C++源文件

    file.cc C++源文件

    file.cxx C++源文件

    file.m Objective-C源文件

    file.s 匯編語言文件

    file.o 目標文件

    a.out 連接的輸出文件

    TMPDIR/cc* 臨時文件

    LIBDIR/cpp 預處理器

    LIBDIR/cc1 C編譯器

    LIBDIR/cc1plus C++編譯器

    LIBDIR/collect

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>