1

我正在使用 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. 根据头文件,这些是相同的功能,但我可以告诉链接器吗?

4

2 回答 2

1

求助于 Google 将我指向我 Mac 上的一个文件:

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

其中包含一个符号的声明

_mm_idivrem_epi32

所以看起来你好像缺少链接或包含。

于 2010-07-01T18:24:13.750 回答
0

我的猜测是有问题的源文件(phys_grid.f90?)没有implicit none声明。没有它,ifort 只会假设在某个地方必须有一个与该配置文件匹配的例程,然后愉快地编译它并将其交给链接器进行解析。

当然,你的下一个工作是去寻找那个丢失的例程的代码,或者弄清楚它的作用,以便你可以重写它。

于 2010-07-01T18:10:07.647 回答