歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> GCC 安裝手冊[中文版]

GCC 安裝手冊[中文版]

日期:2017/2/27 14:14:05   编辑:更多Linux
  安裝 GNU CC =========== 本文為gcc installation guide之中譯本,版權所有,譯者允許本文在網際 網路上作免費之流傳、復制,然除經譯者允許外,禁止任何商業使用。 譯者: 工技資管所 陳振宇 [email protected] 交大資管所 宋振華 [email protected] 這是一份在Unix系統上安裝GNU CC的程序,VMS系統的使用者請看 *注解:VMS 安裝。在這一節中,我們假設編譯的動作是在和 原始檔案相同的目錄下執行;如果希望在其他目錄下執行編譯動 作,請看 *注解:其他目錄。 在MS-DOS下直接安裝 GNU CC 是不可行的,使用 DOS 下的任何 編譯器皆無法成功的編譯 GNU CC,除非你使用 GNU CC 本身。欲 在 MS-DOS 下安裝 GNU CC,你必需取得已完全編譯完成的套件:DJGPP。 DJGPP 中含有機器碼檔案以及原始程式檔,並且還包含了所有必需的 編譯工具及函式庫。 1.如果你是在另外一部機器上,在同一目錄下先完成了GNU CC的 編譯,執行 "make distclean" 來刪除一些可能無用的檔案。 其中一個被刪除的檔案叫做 "Makefile";如果 "make distclean" 回應 Makefile 不存在(not exist)的訊息,那可能表示這個目 錄已經被適當的清理完畢。 2.在 System V Release 4 系統上,請確定在路徑 "PATH" 設定中, "/usr/bin" 在 "/usr/UCb" 之前。因為 "/usr/ucb" 中的 cc 使用了 有錯誤的函式庫。 3.你可以執行 "configure" 這支程式來設定 host machine、build machine 、及 target machine。 所謂的 "build machine" 指的是你目前正在使用的機器;而 "host machine" 則是你期望編譯後所產生的編譯器工作的 機器;最後 "target machine" 則是你期望這個編譯器 (正在做編譯的那個)產生的目的碼的主機。(一般而言, 前兩者是相同的)。 如果你正在建立一的產生它自己執行的機器的目的碼的編譯器 (native compiler),一般而言,不需要在 "configure" 作 任何的設定;它將以目前正在使用的機器作為 host、build 及 target machine。所以當你制作 native compiler 的時候,不需 作任何設定。除非 "configure" 無法指出你的系統組態或是它猜 錯了。 這樣的情況下,用選項 --build 指定 build machine 的 "configuration name"; host 及 target machine 將預設和 build machine相同。(若你正在建立的是一個交互編譯器,請看 *注解:交互編譯器) 底下是一個例子: ./configure --build=sparc-sun-sunos4.1 建置名 (configuration name) 可能是一個標准的形式或者是標准形 式的縮寫。 一個完整的建置名有由 "-" 號分開的三個部份。大概是: "CPU名稱-廠商名稱-系統名稱"(每一個部份可含有自己的 "-" 號,configure 這個程式會自行分辨之)。舉例來說: "m68k-sun-sunos4.1" 是指 Sun 3。 你也可以用別名取代部份的建置名。例如: `sun3' 就代表了 `m68k-sun' ,`sun3-sunos4.1' 也是另一種 Sun 3 的表示方法。你也可以簡單點用 `sun3-sunos',因為這邊假設 SunOS 的版本預設為 4. `sun3-bsd' 也可 以,因為 `configure' 知道 SunOS 是 Sun 3 上唯一的 BSD 變種。 你可以在各種系統型態後面注明版本號碼,及 CPU 型號。在大部份的例子 當中,版本是沒用的,而且會被忽略掉。所以如果你知道的話,最好也把 號碼加上去。(ranma 注:這段原文怪怪的) 關於所支援的建置名與建置的相關注解,請參考 *注解:建置。在繼續安裝 GNU CC 之前,你最好看一下那份注解。 底下有四種附加的選項可以讓你分別指定不同的硬體與軟體建置: `--with-gnu-as', `with-gnu-ld`, `--with-stabs' 及 `--nfp'。 `--with-gnu-as' 如果你想要將 GNU CC 拿來跟 GNU 組譯器 (GNU assembler) 並用的話,你可以在執行 `configure' 時加上 `--with-gnu-as' 這 個選項。 使用這個選項並不會安裝 GAS。 它只是將 GNU CC 的輸出修改成可以 和 GAS 並用而已。要不要安裝 GAS 由你自己決定。 相反地,如果你 *不要* 使用 GAS 而且在建構 GNU CC 時不注明 `--with-gnu-as' 的話,你也要自己決定是不是要安裝 GAS。 GNU CC


會在各個目錄□找 `as' 這個程式,如果它找到了 GAS 的話,它會用 GAS。如果你不確定 GNU CC 到底是找到哪一個組譯器來用的話,在 執行 gcc 時加上 `-v' 這個選項。 會因為你是否使用 GAS 而產生不同變化的系統有: `hppa1.0-ANY-ANY', `hppa1.1-ANY-ANY', `i386-ANY-sysv', `i386-ANY-isc', `i860-ANY-bsd', `m68k-bull-sysv', `m68k-hp-hpux', `m68k-sony-bsd', `m68k-altos-sysv', `m68000-hp-hpux', `m68000-att-sysv', `ANY-lynx-lynxos', 及 `mips-ANY'). 對於其他系統, `--with-gnu-as' 並不會造成影響。 上述系統中 (除了 HP-PA, 386 上的 ISC, 及 `mips-sgi-irix5.*'), 如果你使用 GAS,你也應該要使用 GNU 連結器 (linker),也就是要 注明 `--with-gnu-ld'。 `--with-gnu-ld' 如果你想要拿 GNU 連結器跟 GNU CC 並用的話,注明這個選項。 這個選項並不會安裝 GNU 連結器,它只是改變 GNU CC 的習性來 配合 GNU 連結器而已。比較不同的是,它使得 `collet2' 這個程式 不會被安裝。這個程式是在大部份的建構中拿來做系統連結器的前 置處理用的。 `--with-stabs' 在大部份以 MIPS 為基礎的系統以及 Alpha 上,你必須指明 要 GNU CC 產生出正規的 ECOFF 除錯格式,或是要 BSD 式的 stabs 傳遞 ECOFF 的符號表。正規的 ECOFF 除錯格式並不能完整地 處理 C 以外的語言。而 BSD stabs 格式可以處理其他語言,但只能 在 GNU 除錯器 (GNU debugger) 上面做。 在正常情況下,GNU CC 預設使用 ECOFF 除錯格式,如果你偏好 BSD stabs 格式,在編譯時注明 `--with-stabs'。 不管你在建立 GNU CC 時是選用哪一種預設值,使用者都可以用 `-gcoff' 和 `-gstabs+' 這兩個選項來指定他所要用的除錯格式。 `--with-stabs' 在 386 上的 ISC 系統中有特別意義,當 `--with-gas' 也被用到時。它會選擇使用嵌在 COFF 輸出中的 stabs 除錯資訊 (stabs debugging information embedded in COFF output) 。這類的 除錯資訊也支援 C++,普通的 COFF 除錯資訊並不能做到。 `--with-stabs' 在跑 SVR4 的 386 系統中也有特殊意義。它選擇使 用嵌在 ELF 輸出中的 stabs 除錯資訊。在 386 SVR4 平台上,目前的 C++ 編譯器 (2.6.0 版) 並不支援 DWARF 除錯資訊。stabs 提供了 另一個可以用的方法。它需要 GAS 和 GDB,因為正常的 SVR4 工具並 不能產生或解譯 stabs 格式。 `--nfp' 在某些系統上,你必須藉由這個選項注明這台機器是否有浮點運 算器。這些系統包括了 `m68k-sun-sunosN' 及 `m68k-isi-bsd'。目前 `--nfp' 在其他系統上並沒有作用,雖然在別的系統上可能也可以有不 同的效果。 `configure' 這個程式會去原始碼目錄底下的子目錄□面去找那些要跟 GNU CC 整合的其他編譯器。例如 GNU 的 C++ 編譯器,G++,放在 `cp' 這個子目錄□。`configure' 會把建立這些編譯器的規則加到 `Makefile' 中。 底下我們會詳細說明所有 `configure' 會設定的檔案。在正常情況下, 你不需要去擔心這些檔案。 * 會建立一個叫 `config.h' 的檔案,□面有一個 `#include' 記載了你 將來要用來執行這個編譯器行的機器的頂層設定檔 (*注解:建置)。這個檔 案用來定義 host machine 的資訊。其中包含 `tm.h'。 頂層設定檔放在 `config' 這個子目錄□。它都叫做 `xm-某某東西.h', 通常是 `xm-機器名.h',但有些例外。 如果你的系統不支援符號連結 (symbolic link),你可以要設定 `config.h' 讓它包含一條 `#include' 指到適當的檔案。 * 會建立一個叫 `tconfig.h' 的檔案,它引入了 target machine 的頂層 設定檔。這是為了要用來編譯一些要在那台機器上跑的程式。 * 會建立一個叫 `tm.h' 的檔案,它包含了 target machine 的機器描述 巨集檔案 (machine-description macro file)。它應該是放在 `config' 子目錄中而且它的名字通常是 `機器名.h'。 * `configure' 這個命令檔也會在 `Makefile.in' 這個樣版檔上加入一些 字 來產生 `Makefile'。 這些額外的文字來自 `config' 目錄中叫做 `t-TARGET' 及 `x-HOST' 的檔案。如果這些檔案不存在,那就表示不需要為 target 或 host machine 加上其他東西。 4. 安裝 GNU CC 的標准目錄是 `/usr/local/lib'。如果你打算安裝到別的地方, 在執行 `configure' 的注明 `--previx=目錄'。`目錄' 是你打算用來取代 `/usr/local' 的目錄名稱,除了底下這個例外: 不管你的編譯器安裝在何處, `/usr/local/include' 都是會被加到找尋標頭檔的目錄。如果你不想要這樣, 你可以用下面這個 `--local-prefix' 選項。

5. 指定 `--local-prefix=目錄',這樣可以讓你設定編譯器找尋標頭檔的路徑。 而不是使用 `/usr/local/include'。 *只有* 在你的電腦上放你特殊的規格檔案有不同習慣 (不是 `/usr/local') 時,你才會需要 `--local-prefix' 這個選項。 *不要* 把 `/usr' 指定



*只有* 在你的電腦上放你特殊的規格檔案有不同習慣 (不是 `/usr/local') 時,你才會需要 `--local-prefix' 這個選項。 *不要* 把 `/usr' 指定



Copyright © Linux教程網 All Rights Reserved