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

问题描述 投票:0回答:1

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

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

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

其中

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

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

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

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

compilation fortran gfortran intel-fortran
1个回答
2
投票

评论的总和。链接器显然收到了由 gfortran 编译的名为

file.o
的目标文件,并且不知道在哪里可以从 gfortran 运行时库中找到符号。构建脚本没有使用新编译器重新编译此文件。

解决方案是使用特定构建系统的设施,例如

make clean
,删除先前构建生成的所有文件。

我注意到某些构建脚本往往会忽略的

.mod
文件也可能存在问题。

© www.soinside.com 2019 - 2024. All rights reserved.