1. 安裝Fortran編譯器(gfortran)
Debian系統下,Fortran編譯器的核心選擇是GNU Fortran(gfortran),它是GCC(GNU Compiler Collection)的一部分,支持Fortran 95及以上標準。通過以下命令安裝最新穩定版:
sudo apt update # 更新系統包列表
sudo apt install gfortran # 安裝gfortran編譯器
安裝完成后,通過gfortran --version驗證是否成功,若輸出版本信息(如GNU Fortran (Debian 12.2.0-14) 12.2.0),則說明安裝完成。
2. 配置Fortran運行時庫(解決共享庫缺失問題)
若運行Fortran程序時出現libgfortran.so.X: cannot open shared object file錯誤(如libgfortran.so.5缺失),需安裝對應的libgfortran運行時庫:
sudo apt install libgfortran5 # Debian較新版本(如12及以上)通常需要此包
若系統提示找不到對應版本,可通過apt search libgfortran查找適配當前系統的包名(如Debian 11可能需要libgfortran4)。
3. 設置環境變量(確保庫路徑可訪問)
gfortran的庫文件(如libgfortran.so)默認安裝在/usr/lib/x86_64-linux-gnu/(64位系統)或/usr/lib/i386-linux-gnu/(32位系統)。若系統無法自動找到庫文件,需將庫路徑添加到LD_LIBRARY_PATH環境變量:
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH # 臨時生效
為永久生效,將上述命令添加到用戶家目錄的.bashrc文件中:
echo 'export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc # 使修改立即生效
可通過echo $LD_LIBRARY_PATH驗證路徑是否已添加。
4. 編譯與鏈接Fortran程序
使用gfortran編譯Fortran源文件(如hello.f90)生成可執行文件:
gfortran hello.f90 -o hello # 編譯并鏈接,生成名為hello的可執行文件
若程序依賴外部Fortran庫(如LAPACK、BLAS),需通過-L指定庫路徑、-l指定庫名:
gfortran my_program.f90 -L/usr/lib/x86_64-linux-gnu -llapack -lblas -o my_program
其中,-L指向庫文件所在目錄(如/usr/lib/x86_64-linux-gnu),-l后跟庫名(去掉lib前綴和.so后綴,如lapack對應liblapack.so)。
5. 創建動態鏈接庫(可選,進階需求)
若需將Fortran代碼編譯為動態鏈接庫(.so文件),供其他程序調用,可使用以下命令:
gfortran -shared -fPIC -o libmylib.so mylib.f90 # -shared生成動態庫,-fPIC生成位置無關代碼
編譯主程序時鏈接該動態庫:
gfortran main.f90 -L. -lmylib -o main # -L.表示當前目錄,-lmylib鏈接libmylib.so
運行主程序前,需確保動態庫路徑在LD_LIBRARY_PATH中(如export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH)。
6. 使用Makefile自動化構建(可選,進階需求)
為簡化編譯流程,可創建Makefile文件(注意:Makefile中的縮進必須用Tab鍵,而非空格):
FC = gfortran # 編譯器
FFLAGS = -O2 # 編譯選項(優化級別2)
LDFLAGS = # 鏈接選項
SOURCES = main.f90 # 源文件列表
OBJECTS = $(SOURCES:.f90=.o) # 目標文件列表(.f90替換為.o)
EXECUTABLE = my_program # 最終可執行文件
all: $(EXECUTABLE) # 默認目標
$(EXECUTABLE): $(OBJECTS) # 生成可執行文件的規則
$(FC) $(LDFLAGS) $(OBJECTS) -o $@
clean: # 清理生成的文件
rm -f $(OBJECTS) $(EXECUTABLE)
使用make命令編譯程序,make clean清理生成的文件。