编译 IBM Open XL Fortran 程序

本节说明如何使用调用命令编译源程序。

要编译源程序,请使用 xlfxlf_r f77fort77xlf90xlf90_rf90xlf95xlf95_rf95xlf2003xlf2003_rf2003之一。 xlf2008xlf2008_rf2008 命令,其格式如下:
读取语法图跳过可视语法图xlfxlf_rf77fort77xlf90xlf90_rf90xlf95xlf95_rf95xlf2003xlf2003_rf2003xlf2008xlf2008_rf2008cmd_line_opt输入文件

这些命令基本上都接受相同的 Fortran 语言。 主要区别在于它们使用不同的缺省选项 (您可以通过读取 配置 文件 /opt/IBM/openxlf/17.1.1/etc/xlf.cfg.nn ,其中 .nn 表示操作系统级别来查看这些选项)。

调用命令执行必要的步骤来编译 Fortran 源文件,组装任何 .s 文件,并将对象文件和库链接到可执行程序中。 尤其是, xlf_rxlf90_rxlf95_rxlf2003_rxlf2008_r 命令使用多线程组件 (库, crt0_r.o 等) 来链接和绑定对象文件。

下表总结了可以使用的调用命令:
表 1. IBM Open XL Fortran 调用命令
驱动程序调用 1 首要功能 链接库
xlf 选定的 Fortran 语言级别 2 libxlf90.a
xlf_r 所选语言级别的线程安全版本,操作系统缺省 POSIX pthreads API。 2 libxlf90.a
f77, fort77 FORTRAN 77 libxlf90.a
xlf90, f90 Fortran 90 libxlf90.a
xlf90_r 线程安全 Fortran 90,操作系统缺省 POSIX pthreads API libxlf90.a
xlf95, f95 Fortran 95 libxlf90.a
xlf95_r 线程安全 Fortran 95,操作系统缺省 POSIX pthreads API libxlf90.a
xlf2003 Fortran 2003 libxlf90.a
xlf2003_r 线程安全 Fortran 2003,操作系统缺省值 POSIX pthreads API libxlf90.a
f2003 Fortran 2003 libxlf90.a
xlf2008 Fortran 2008 libxlf90.a
xlf2008_r 线程安全 Fortran 2008,操作系统缺省值 POSIX pthreads API libxlf90.a
f2008 Fortran 2008 libxlf90.a
备注信息:
  1. 这些调用命令包含在 /opt/IBM/openxlf/17.1.1/bin 目录中。
  2. xlf xlf_r 调用命令根据源文件名的后缀选择相应的语言级别。 无论 Fortran 源文件名称后缀是什么,其他调用命令的行为始终一致。 请参阅以下示例:

    xlf program1.f program2.f90 program3.f95 program4.f03 program5.f08
    
    行为如下:
    • 编译 program1.f 文件时就如同调用命令是 f77
    • 编译 program2.f90 文件时就如同调用命令是 xlf90
    • 编译 program3.f95 文件时就如同调用命令是 xlf95
    • 编译 program4.f03 文件时就如同调用命令是 xlf2003
    • 编译 program5.f08 文件时就如同调用命令是 xlf2008

为线程应用程序和非线程应用程序提供了 libxlf90.a 。 XL Fortran 在运行时确定您的应用程序是否是线程的。

IBM® Open XL Fortran 提供了库 libxlf90_t.a以及 libxlf90.alibxlf90_t.a 导出与 libxlf90.a 相同的入口点。libxlf90.a不同, libxlf90_t.a 不提供线程同步 或线程重入例程。 因此,一次只能有一个 Fortran 线程可以执行 I/O 操作或调用 Fortran 内在机制。 可以在只有一个 Fortran 线程的多线程应用程序中使用 libxlf90_t.a 而不是 libxlf90.a ,以避免 libxlf90.a中的线程同步开销。

当您将多线程可执行文件与多个 Fortran 线程绑定时,应显示 -lxlf90 而不是 -lxlf90_t 在命令行中。 请注意,使用 xlf_rxlf90_rxlf95_rxlf2003_rxlf2008_r 调用命令可确保正确链接。

调用命令或选项隐含的伪指令触发器如下所示:
  • 对于 f77fort77f90f95f2003xlfxlf90xlf95xlf2003xlf2008 调用命令,缺省情况下,伪指令触发器为 IBM*
  • 对于所有其他调用命令,缺省情况下,伪指令触发器为 IBM*IBMT
  • -qthreaded 生效时,编译器还会识别 IBMT 伪指令触发器。