Gfortran版本4.1.2和4.2.3

时间:2010-09-28 15:22:29

标签: version fortran gfortran

大家好,我正在将我的代码从运行在ubuntu上的集群部署到具有相同硬件的集群上,但是看起来更老了gfortran编译器。源实际上是由ifort编译的,但由于它没有安装在红色群集上,我可能不得不切换到gfortran。

现在的问题是代码无法编译。在我可以在我的代码部分修复的类型中有“可分配”这个东西,但是其他人也有其他贡献,而不是准备好将他们的代码调整到旧标准。

我的问题:

  1. 我如何在其他系统上部署,希望不会发生太大变化?
  2. 当使用相同版本的编译时,还有什么让我感到惊讶的,只是不同的颠覆?
  3. 我如何强制执行此类事件不会再次发生?代码应该可以部署到各种系统上,而不会诉诸暴力。
  4. 感谢您的建议和欢呼

2 个答案:

答案 0 :(得分:1)

我认为你有3个选择:

  1. 交叉编译:即编译 你的开发机器 在部署上执行 机;我不知道是不是 可以使用您的设置,但确实如此 值得调查,如果你没有 已经这样做了。
  2. 编程到所有编译器中实现的Fortran功能集 - 这意味着重写代码以取出4.2.3实现4.1.2所没有的功能。
  3. 升级部署计算机上的编译器以匹配开发计算机上的编译器。
  4. 其中我认为(1)可能很难;如果它是那么我会去(3)。如果那是不可能的,那么它必须是(2) - 我没有看到任何其他选项。

    现在回答你的问题:

    1. 上面回答。
    2. 不确定,但Gfortran的发行说明应该告诉您4.2.3实现哪些Fortran语言功能4.1.2没有。
    3. 只能使用您可以在目标平台上编译的Fortran版本进行编程。

答案 1 :(得分:1)

gfortran从4.0版开始。版本4.1和4.2是旧的,缺少许多功能,可能有错误。您可能会遇到代码使用的其他缺失功能。我建议,如果可能的话,将编译器升级到当前的稳定版本,即4.5。

支持所有版本的gfortran会对您的代码造成许多限制。最好找出最有效的版本,并将该信息添加到文档中。对于我的代码,由于我大量使用了ISO C绑定,因此该版本为4.3。

gfortran wiki http://gcc.gnu.org/wiki/GFortran有一个版本更新日志,可以帮助您确定所需的版本。唯一可靠的方法是测试。

如果要强制实施版本要求,可以在Fortran中进行测试。您可以在make过程中运行一个小测试程序,如果gfortran版本太早,则可以中止。

以下代码片段显示了从Fortran程序输出gfortran版本号的两种方法。将文件类型命名为“.F90”,以便gfortran调用预处理器。

#ifdef __GFORTRAN__ 
    write (*, '( "gfortran" )' )
    write (*, '( I0, ".", I0 )' )  __GNUC__, __GNUC_MINOR__

! Merged version number:
#define GCC_VERSION (__GNUC__ * 10000  + __GNUC_MINOR__ * 100  + __GNUC_PATCHLEVEL__)
    write (*, '( I0 )' )  GCC_VERSION

#endif