compiler-construction - 用gfortran编译的程序,如何用ifort重新编译?

标签 compiler-construction compilation fortran gfortran intel-fortran

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

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

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

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

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

1) 对于 gfortran 版本之间的“ undefined reference ”错误,是否有任何快速修复方法?该代码最初是在 arc1 上使用 gfortran 4.1.2 编译的,我正在尝试在 arc2 上使用 gfortran 4.4.7 编译它。

2)如果没有,有什么方法可以“解锁”代码,以便我可以使用 ifort 在两个系统上重新编译它(因为两个系统都安装了相同版本的 ifort)?目前,当我尝试在任一系统上使用 ifort 编译它时,它会抛出数千个“ undefined reference ”错误。

最佳答案

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

解决方案是使用特定构建系统的设施,例如make clean,删除先前构建生成的所有文件。

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

关于compiler-construction - 用gfortran编译的程序,如何用ifort重新编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22256428/

相关文章:

c# - c# 编译器是否优化 Count 属性?

compiler-construction - 编程语言和编译器

r - 使用 rmarkdown 在 knit 中从列表中打印 ggplots 不起作用

compilation - 有没有办法在 Visual Studio Code 中编译 Lisp 源文件?

fortran - 使用下划线定义种类/精度

c++ - Visual Studio 6.0 和 VS 2010 编译器之间的主要区别

c++ - 编译器和字节序

python - 如何将 python 函数/类/模块对象转换为 python 代码对象

parallel-processing - openmp矩阵乘法

function - 在Fortran中将多个变量的外部函数作为一个变量的函数传递