1. 准备Debian系统环境
在Debian上发布Fortran程序前,需先搭建编译和依赖管理环境。打开终端,执行以下命令更新包列表并安装必要工具:
sudo apt update
sudo apt install gfortran build-essential
gfortran是GNU Fortran编译器,用于将Fortran源代码编译为可执行文件;build-essential包含编译C/C++/Fortran程序所需的基础工具(如make、gcc),确保编译流程顺畅。
2. 编译Fortran程序
将Fortran源代码保存为.f90(推荐,支持现代Fortran特性)或.f(传统Fortran)格式(如my_program.f90)。通过以下命令编译:
gfortran -o my_program my_program.f90
该命令生成名为my_program的可执行文件。main.f90(主程序)、module1.f90(模块)、utils.f90(工具函数)组成,需指定所有源文件:gfortran -o my_program main.f90 module1.f90 utils.f90
-l指定库名(去掉前缀lib和后缀.so/.a),并通过-L指定库路径(系统库默认在/usr/lib或/usr/local/lib,无需额外指定):gfortran -o my_program my_program.f90 -llapack -lblas
若库为手动编译安装的自定义库(如libcustom.so位于/opt/custom/lib),需添加-L/opt/custom/lib和-lcustom。3. 管理程序依赖
Debian系统通过APT包管理器管理Fortran程序的依赖库(如LAPACK、BLAS、MPI),确保依赖项的兼容性和安全性:
sudo apt install libblas-dev liblapack-dev libopenmpi-dev # BLAS/LAPACK(线性代数)、OpenMPI(并行计算)
apt search查找包名:apt search fftw | grep fortran # 查找FFTW的Fortran绑定库
sudo apt install libfftw3-dev # 安装FFTW3的Fortran开发包
libexample.f90):gfortran -c -fPIC libexample.f90 -o libexample.o # 编译为位置无关代码(.o文件)
gfortran -shared libexample.o -o libexample.so # 生成动态库(.so文件)
sudo cp libexample.so /usr/local/lib # 复制到系统库目录
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH # 临时添加库路径(需写入~/.bashrc永久生效)
编译程序时通过-L/usr/local/lib -lexample链接该库。4. 自动化构建(可选但推荐)
为简化多文件项目的编译流程,可使用Makefile或Fortran程序包管理器(FPM)自动化构建:
使用Makefile:
创建Makefile文件(注意缩进为Tab,而非空格),定义编译规则:
FC = gfortran # 编译器
FFLAGS = -O2 # 编译选项(优化级别2)
SRCS = main.f90 module1.f90 utils.f90 # 源文件
OBJS = $(SRCS:.f90=.o) # 目标文件(.f90 -> .o)
TARGET = my_program # 可执行文件名
$(TARGET): $(OBJS)
$(FC) $(FFLAGS) -o $@ $^ # 链接目标文件生成可执行文件
%.o: %.f90
$(FC) $(FFLAGS) -c $< -o $@ # 编译每个源文件为目标文件
clean:
rm -f $(OBJS) $(TARGET) # 清理生成的文件
执行make编译程序,make clean清理生成的.o和可执行文件。
使用FPM(Fortran Package Manager):
FPM是Fortran生态的现代构建工具,支持依赖管理和跨平台构建。安装FPM(若未通过系统包管理器安装):
wget https://github.com/fortran-lang/fpm/releases/download/v0.9.0/fpm-0.9.0-linux-x86_64
mv fpm-0.9.0-linux-x86_64 /usr/local/bin/fpm
chmod +x /usr/local/bin/fpm
初始化项目、编译并运行:
fpm new my_project # 创建新项目(生成src/、test/等目录结构)
cd my_project
fpm run # 编译并运行程序
fpm build # 仅编译(生成build/目录下的可执行文件)
fpm install # 安装到系统(默认路径为~/.local/bin)
FPM会自动处理项目依赖(如通过fpm.toml配置文件声明的库),简化复杂项目的构建流程。
5. 发布程序
编译完成后,可通过以下方式发布Fortran程序:
my_program)复制到目标机器(需同为Debian或兼容Linux系统),赋予执行权限后运行:chmod +x my_program # 赋予执行权限
scp my_program user@target_machine:/path/to/destination # 复制到目标机器
ssh user@target_machine # 登录目标机器
./my_program # 运行程序
apt安装),可将程序打包为.deb文件。步骤如下:
sudo apt install dh-make devscripts
mkdir -p my_program_1.0/debian
cp my_program my_program_1.0/usr/local/bin/ # 将可执行文件复制到debian目录下的标准路径
debian/control文件(描述包信息):cd my_program_1.0
dh_make --createorig -s -y # 生成control、copyright等文件(按提示操作)
编辑debian/control文件,填写包名、版本、依赖项(如Depends: libc6 (>= 2.31))等信息。debuild -us -uc # 生成my_program_1.0.deb(-us -uc表示不签名)
sudo dpkg -i ../my_program_1.0.deb # 在本地安装
目标机器可通过sudo dpkg -i my_program_1.0.deb安装,或通过apt添加仓库后直接安装。注意事项
LD_LIBRARY_PATH环境变量(如export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH),并写入~/.bashrc或~/.profile永久生效。gfortran版本与目标机器的gfortran版本兼容(如避免跨大版本发布)。-Wall(显示所有警告)、-g(生成调试信息)选项,便于排查问题;使用gprof(性能分析)或valgrind(内存检查)优化程序。