如何在 Windows 上安裝 GNU Fortran G77 編譯器

Fortran 的全名是 Formula Translation ,是世界上第一個被正式採用並流傳至今的高級編程語言。顧名思義, Fortran 是一款著重數值分析和計算的電腦語言,適合用於著重數學的編程上。

Fortran 經過不同版本的改進,新版本的 Fortran 加入了面向對象編程(Object-oriented programming)和指針(Pointer)等現代語言常見的特性。如果要了解 Fortran 的演變和歷史,大家可以到「維基百科」或「Wikipedia」看一看。

G77 簡介

G77 是由 Free Software Foundation (FSF) 開發的 Fortran 編譯器,可以將 Fortran 77 代碼編譯。除了支援標準的 Fortran 77 編碼和語法外,還加入了一些常用的擴充,而這些擴充大都被納入 Fortran 90 的標準之中。雖然新版本的編譯器已經改稱 GNU Fortran (GFortran) ,並且不再支援舊版本的 G77 ,但是大家可以透過 Fortran 77 的編程,了解到 30 多年前未有 OOP 代碼時的編碼技巧。

下載檔案

Windows 版本的 G77 包含共有 3 個檔案︰

檔案: g77doc.zip

說明: G77 說明文件的存檔。

檔案: g77exe.zip

說明: 編譯器 (Compiler),連結器 (Linker)和配套的可執行程式 (Ancillary Executables)。

檔案: g77lib.zip

說明: 函式庫 (Libraries)。

如果沒有解壓縮軟件,請下載這個檔案︰

檔案: unzip.zip

下載位置︰

Fortran: Install | Department of Mathematics

解開 G77 編譯器 的壓縮檔案

  1. 在開始安裝前,請確保使用的 Windows 帳戶擁有系統管理員權限。要檢查當前用戶的權限,可「按此」查看教學。如果當前使用的帳戶沒有系統管理員權限,請聯絡您的系統管理員,或者「按此」查看啟用系統管理員 Administrator 帳戶的教學。

  2. 將「g77exe.zip」、「g77lib.zip」和「g77doc.zip」三個檔案解壓縮,建議解壓縮至「C:\」。如果您沒有解壓縮軟件,請將4個下載的檔案放在「C:\」內,然後以系統管理員身分執行「命令提示字元」,並一句句輸入以下指令︰

    1
    2
    3
    4
    
    ren unzip.zip unzip.exe
    unzip g77exe.zip
    unzip g77lib.zip
    unzip g77doc.zip
    

    G77

設定環境變數

  1. 按下「開始」,在「電腦」按下滑鼠右鍵,選擇「內容」。如果是 Windows XP 作業系統,則在「我的電腦」按下滑鼠右鍵,再選擇「內容」。

    內容

  2. 在左邊選單按下「進階系統設定」。如果是 Windows XP ,則跳過這步驟。

    進入進階系統設定

  3. 在上面的標籤選單中選擇「進階」,再按下「環境變數…」。

    進階

  4. 在「系統變數」中選擇變數「Path」,然後按「編輯…」。

    系統變數

  5. 在「變數值(V)」的最後加上 G77 的目錄內的 bin 資料夾路徑。例如︰「;C:\G77\bin」。路徑前要加上「分號(;)」。之後按下「確定」。

    G77 bin 路徑

  6. 點擊「新增(W)…」,變數名稱(N) 內填上「LIBRARY_PATH」,而變數值(V)內填上「C:\G77\lib」。之後重覆按下「確定」,直至所有頁面都關上。

    LIBRARY_PATH

編譯器的使用方法

  1. 打開「命令提示字元」,移至需要編譯的Fortran檔案目錄,輸入

    1
    
    g77 helloworld.for -o foolegg.exe
    

    當中,「helloworld.for」是源碼檔案,「foolegg.exe」是編譯後的可執行檔案(Binary file)。

    編譯及執行

  2. 點撃「foolegg.exe」就可以執行程式了。

  3. 以下是一些常用的編譯選項︰ -c 產生目標檔案(Object file),並不執行連結器(Linker)。 -Wall 顯示編譯時產生的警告訊息。 -O 代碼最佳化。

Undefined Reference 錯誤

  1. 筆者在第一次編譯時會出現以下錯誤訊息,只需要重新啟動系統一次錯誤訊息也就消失了。

    1
    2
    
    undefined reference to 's_wsle'
    undefined reference to `s_stop'
    
Made in Hong Kong