编译程序是一个把源代码通过编译器转变成可执行程序的过程。首先,需要程序的源文件。这个源程序可以先 在自己机子上编译好,再通过 Winscp 或 scp 等传到服务器上进行编译,也可以在服务器上调用文本编辑器 新建一个。这里面我们演示一下后者。
[mike@c1 ~]$ vi hello.f90
vi 是 Linux 系统下很广泛,功能很强大的编辑器。几乎每个 Linux 系统都会自带一个,而且上手以后可以 十分迅速的进行编辑。打开 vi 编辑器以后,先输入字母 i 进入插入模式,再输入以下内容。
Program hello print *, "Hello World!" End Program
输入完成以后,按 Esc 键退出插入模式,返回到命令模式。再按冒号,可以看到屏幕底行的左边出现了一个 冒号,再按 wq,确认,一个叫 hello.f90
程序就编辑好了。
[mike@c1 ~]$ ls dir-a dir-b hello.f90 regular-file
如果想进一步了解 vi
编辑器,可以输入 vimtutor
命令,再按提示进行练习。这里面继续进行后面的
[mike@c1 ~]$ gfortran hello.f90 -o hello [mike@c1 ~]$ ls dir-a dir-b hello hello.f90 regular-file
可以看到多了一个叫 hello 的文件,这就是刚刚用 gfortran 编译器编译出来的可执行程序。
[mike@c1 ~]$ ./hello Hello World!
运行一下这个程序,可以看到成功的输出了结果。 ./hello
的意思是“当前目录下的 hello
" 文件。这是一个相对路径。执行可执文件需要明确指定当前目 录,是出于安全性的考虑。
如果程序由多个源文件组成,则可以把这些源文件都指定为命令行参数进行编译。如程序由 main.f90
与 functions.f90
组成
! File: main.f90 Program main call print_greeting End Program
! File: functions.f90 subroutine print_greetings print *, "Hello world!" end subroutine
在命令行下运行
$ gfortran -o hello main.f90 functions.f90
就可以编译出 hello 程序。
如果程序文件较多的话,可先将源文件编译成目标文件,再将目标文件链接成可执行程序。
[mike@c1 ~]$ gfortran -c functions.f90 [mike@c1 ~]$ ls dir-a functions.f90 hello.f90 main.f90 regular-file dir-b functions.o hello.txt nohup.out
执行成生了 functions.o
目标文件。
[mike@c1 ~]$ gfortran -c main.f90 [mike@c1 ~]$ gfortran main.o functions.o -o hello
也可以目标文件与源文件写在一起。如果只改变了 main.c
文件,可以执行如下命令
[mike@c1 ~]$ gfortran main.c functions.o -o hello
这将重新编译 main.c
文件,并与上次生成的 functions.o
文件链接,生成可执行文件 hello
.
-l
选项是指定用来链接的库。如在安装了 lapack 库的机器上,可以用 -llapack
来链接 lapack
库。 (现在的服务器上还没安上。)
还有一个编译选项 -O
, 是开启编译器优化。一般可使用参数 -O3
进行优化。
对于其它的编译器,如 gcc
, g++
, ifort
, icc
. (它们分别是 GNU 的 C 语言,C++,以及 Intel 的 Fortran, C 编译器,本服务上都己安装。),以上介绍的 -c
, -o
选项是通用的。其它具体的使用,可查阅相应的 man.
$ man ifort
- 海报