ifort链接器未定义引用

时间:2010-07-01 17:51:10

标签: c fortran linker-errors intel

我正在使用英特尔编译器(ifort)编译用Fortran编写的大型HPC系统。大约有几百个单独的模块,它们都编译得很好,但链接器抛出了这个错误:

phys_grid.o(.text+0x91b2): In function `phys_grid_mp_assign_chunks_':
: undefined reference to `_mm_idivrem_epi32'

_mm_idivrem_epi32似乎是编译器自动向量化的结果,但如果编译器生成它,为什么我会收到此错误?我是否需要链接一些额外的库?

更新

使用nm,我能够将该功能追溯到libsvml,但是与之链接并没有帮助。现在似乎存在问题:ia32intrin.h声明函数如下:

__m128i __cdecl _mm_idivrem_epi32(__m128i * r, __m128i v1, __m128i v2); //__svml_idivrem4

但是从nm的输出,库中的符号是__svml_idivrem4。根据头文件,这些函数是相同的,但我可以告诉链接器吗?

2 个答案:

答案 0 :(得分:1)

求助于Google,我在Mac上指向一个文件:

/Developer/opt/intel/Compiler/11.1/080/include/ia32intrin.h

包含符号声明

_mm_idivrem_epi32

所以看起来好像你错过了一个链接或包含。

答案 1 :(得分:0)

我的猜测是有问题的源文件(phys_grid.f90?)没有implicit none语句。如果没有它,ifort将假设必须有一个匹配该配置文件的例程,并快速编译它并将其交给链接器进行解析。

当然,你的下一个工作是找到那个缺失例程的代码,或者找出WTH,这样就可以重写它。