好的,我有一个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编译它时,它会抛出数千个未定义的引用"错误。
答案 0 :(得分:2)
评论的总和。链接器清楚地接收由gfortran编译的名为file.o
的目标文件,并且不知道从哪里找到gfortran运行时库中的符号。构建脚本没有使用新编译器重新编译此文件。
解决方案是使用特定构建系统的功能,例如, make clean
,删除上一版本生成的所有文件。
我注意到某些构建脚本往往忽略的.mod
文件也可能存在问题。