Ubuntu 10.10 起預設僅提供 gfortran (Fortran 90/95/2003),舊版 Fortran 77 程式碼可能因語法、內建函數、連結差異無法編譯。需從舊版 Ubuntu (Hardy 8.04) 倉庫引入 g77。本文記錄源擴展、aptitude 解決相依、驗證編譯的完整流程。

sudo bash
cat >> /etc/apt/sources.list <<'EOF'
deb https://hu.archive.ubuntu.com/ubuntu/ hardy universe
deb-src https://hu.archive.ubuntu.com/ubuntu/ hardy universe
deb https://hu.archive.ubuntu.com/ubuntu/ hardy-updates universe
deb-src https://hu.archive.ubuntu.com/ubuntu/ hardy-updates universe
EOF
apt-get update
apt-get install aptitude
aptitude update
aptitude install g77
為何用 aptitude? 跨版本安裝會產生複雜相依衝突 (如 gcc-3.4, libg2c0 等),aptitude 的解決器比 apt-get 更能自動尋找可行解 (降級/保留/安裝特定版本)。
cat > test.f <<'EOF'
PROGRAM HELLO
PRINT *, 'Hello from g77!'
END
EOF
g77 test.f -o test
./test
# 輸出: Hello from g77!
| 問題 | 原因 | 解決 |
|---|---|---|
| 相依衝突導致 aptitude 提出移除大量套件 | Hardy 套件版本過舊,與 Maverick 核心庫不相容 | 選擇 n 拒絕,改用 gfortran -std=legacy 編譯 F77 碼 |
g77: command not found |
安裝未成功或路徑未生效 | which g77、dpkg -l | grep g77 確認 |
連結錯誤 libg2c.so.0 not found |
缺少 Fortran 77 執行期庫 | aptitude install libg2c0 (從 Hardy 源) |
# gfortran 支援 Fortran 77 相容模式
gfortran -std=legacy -ffixed-line-length-none test.f -o test
# -std=legacy: 啟用 F77 延伸語法 (如 DO 迴圈共用標號、Hollerith 常數)
# -ffixed-line-length-none: 取消 72 欄固定格式限制
僅在極少數依賴 g77 特有擴展 (如 AUTOMATIC、VIRTUAL、特定 I/O 格式) 的老舊專案中,才建議採用本文跨版本安裝方案;其餘情況諷以 gfortran -std=legacy 為首選。