在 Ubuntu 下用 Fortran(gfortran) 进行静态编译,主要是让生成的可执行文件不依赖系统的动态库(如 libgfortran、libgcc、libc 等)。下面按常见场景说明。
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
gfortran -static main.f90 -o main
如果成功,用以下命令检查:
ldd main
输出应为:
not a dynamic executable
cannot find -lc原因:缺少 libc.a
解决:
sudo apt install libc6-dev
如果你用了:
use lapack
需要静态库:
sudo apt install liblapack-dev libblas-dev
编译:
gfortran -static main.f90 -llapack -lblas -o main
有时完全静态不可行(Ubuntu 限制),可用:
gfortran -static-libgfortran -static-libgcc main.f90 -o main
这样:
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),可以告诉我,我给你对应静态编译方案。