Gfortran版本4.1.2和4.2.3

问题描述:

嘿,大家好,我将我的代码从运行在ubuntu上的集群部署到具有相同硬件的集群上,但是使用红色帽子,因为它看起来比较古老的gfortran编译器。该源实际上由ifort编译,但由于它没有安装在红色群集上,我可能不得不切换到gfortran。Gfortran版本4.1.2和4.2.3

现在的问题是代码不能编译。在我可以在代码的一部分中修复的类型中有“可分配”的内容,但其他人也有其他人的贡献,因为他们没有准备好使其代码适应旧标准。

我的问题:

  1. 如何我仍然部署到其他系统,希望在不改变多少?
  2. 还有什么其他的惊喜等我使用从相同版本的编译,只是不同的颠覆?
  3. 我如何强制这样的事情不会再发生?该代码应该可以部署到各种系统而不诉诸暴力。

谢谢你的建议和欢呼声

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

支持所有版本的gfortran将导致您的代码有很多限制。确定最早可用的版本并将该信息添加到文档可能会更好。对于我的代码,由于我广泛使用ISO C绑定,因此该版本为4.3。

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

如果您想强制执行版本要求,则可以在Fortran中进行测试。如果gfortran版本太早,你可以运行一个小测试程序作为make过程的一部分,然后中止。

以下代码片段显示了从Fortran程序输出gfortran版本号的两种方法。用filetype“.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 
+0

谢谢我想我会试图说服这些家伙升级他们的gfortran版本 – tarrasch 2010-09-29 08:25:13

我觉得你有3种选择:

  1. 交叉编译:即汇编 开发机 执行您的部署 机;我不知道这是否是 可能与您的设置,但它是 值得调查,如果你还没有 已经这样做。
  2. 编程实现所有编译器中实现的Fortran功能集 - 这意味着要重写代码以取出任何功能4.2.3实现了4.1.2不支持的功能。
  3. 升级部署机器上的编译器以匹配开发机器上的编译器。

其中我认为(1)可能很难;如果是的话,我会去(3)。如果这是不可能的,那么它必须是(2) - 我没有看到任何其他选择。

现在回答你的问题:

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

感谢您的努力。 – tarrasch 2010-09-29 08:25:48