温馨提示×

ubuntu Fortran如何静态编译

小樊
37
2026-10-01 07:44:11
栏目: 智能运维

在 Ubuntu 下用 Fortran(gfortran) 进行静态编译,主要是让生成的可执行文件不依赖系统的动态库(如 libgfortran、libgcc、libc 等)。下面按常见场景说明。


一、最基本的静态编译

1. 简单静态链接(仅 Fortran 运行时)

gfortran -static main.f90 -o main

这会尽量静态链接 Fortran 运行时库。

注意:在较新的 Ubuntu 上,-static 可能因为缺少 libc.a 而失败。


二、安装静态库(关键步骤)

Ubuntu 默认 不安装静态库,需要手动安装。

安装必要静态库

sudo apt update
sudo apt install gfortran
sudo apt install libc6-dev
sudo apt install libgfortran-<版本>-dev

例如:

sudo apt install libgfortran-11-dev

三、完全静态编译(包括 libc)

gfortran -static main.f90 -o main

如果成功,用以下命令检查:

ldd main

输出应为:

not a dynamic executable

四、常见错误与解决

❌ 错误:cannot find -lc

原因:缺少 libc.a

解决:

sudo apt install libc6-dev

❌ 错误:BLAS / LAPACK 找不到

如果你用了:

use lapack

需要静态库:

sudo apt install liblapack-dev libblas-dev

编译:

gfortran -static main.f90 -llapack -lblas -o main

五、只静态 Fortran,不静态 libc(推荐)

有时完全静态不可行(Ubuntu 限制),可用:

gfortran -static-libgfortran -static-libgcc main.f90 -o main

这样:

  • Fortran 运行时静态
  • libc 仍动态(更兼容)

六、OpenMP 静态编译

gfortran -static -fopenmp main.f90 -o main

如失败,可尝试:

gfortran -static-libgfortran -static-libgcc -fopenmp main.f90 -o main

七、验证示例

hello.f90

program hello
  print *, "Hello, static Fortran!"
end program hello

编译:

gfortran -static hello.f90 -o hello

运行:

./hello

八、总结

需求 命令
完全静态 gfortran -static
仅 Fortran 静态 -static-libgfortran -static-libgcc
带 LAPACK 加 -llapack -lblas
Ubuntu 推荐 半静态

如果你有 具体代码 / 第三方库(MPI、NetCDF、HDF5),可以告诉我,我给你对应静态编译方案。

0 踩