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清理生成的文件。