使用gfortran编译的程序,如何用ifort重新编译?

时间:2014-03-07 17:13:43

标签: compiler-construction compilation fortran gfortran intel-fortran

好的,我有一个Linux HPC上的大型开源程序的源代码。有两个不同的系统组成HPC,arc1和arc2,它们共享一个文件系统。本质上,我需要这个程序的两个单独编译版本,因为这两个系统有不同的库和编译器版本等。但是,我希望能够从相同的源代码编译这两个版本。

我遇到的问题是,一旦我用特定的编译器编译了一次代码,它似乎就会被锁定"到那个特定的编译器。当我尝试随后使用不同的编译器重新编译时,即使在同一系统上,它也会给我带来许多错误:

[file.o]:[line]: undefined reference to '_gfortran_****'

其中****是许多不同的内置Fortran函数。我不得不承认我对编译器的实际工作知之甚少,所以我无法解释这一点。

所以,我的查询归结为两个主要问题:

1)是否有快速修复"未定义的参考" gfortran版本之间的错误?该代码最初是在带有gfortran 4.1.2的arc1上编译的,我正在尝试使用gfortran 4.4.7在arc2上编译它。

2)如果没有,有没有办法解开"代码,以便我可以在两个系统上使用ifort重新编译它(因为两个系统都安装了相同版本的ifort)?当我尝试在任一系统上使用ifort编译它时,它会抛出数千个未定义的引用"错误。

1 个答案:

答案 0 :(得分:2)

评论的总和。链接器清楚地接收由gfortran编译的名为file.o的目标文件,并且不知道从哪里找到gfortran运行时库中的符号。构建脚本没有使用新编译器重新编译此文件。

解决方案是使用特定构建系统的功能,例如, make clean,删除上一版本生成的所有文件。

我注意到某些构建脚本往往忽略的.mod文件也可能存在问题。