【发布时间】:2014-03-07 17:13:43
【问题描述】:
好的,我有一个 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 编译它时,都会引发数千个“未定义引用”错误。
【问题讨论】:
-
你确定你用 gfortran 编译你在代码中使用的每个库吗?
-
我不这么认为,该程序主要使用 Fortran,但我认为一些图形位和 bobs 使用 C++。安装脚本被限制为使用 Fortran 和 C++ 编译器的同义版本。
-
显然有一些链接的目标文件是由 gfortran 编译的。链接器通常会打印文件名。我相信是
file.o。 -
所以我需要在尝试重新编译之前手动重新生成目标文件吗?我以为安装脚本会自动执行此操作。
-
如果你把它复制到别的地方就不行了。
标签: compiler-construction compilation fortran gfortran intel-fortran