开发者

ifort linker undefined reference

开发者 https://www.devze.com 2023-01-05 15:36 出处:网络
I\'m compiling a large HPC system written in Fortran using the Intel compiler (ifort). There are about several hundred individual modules and they all compile fine, but the linker throws up this error

I'm compiling a large HPC system written in Fortran using the Intel compiler (ifort). There are about several hundred individual modules and they all compile fine, but the linker throws up this error:

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

The _mm_idivrem_epi32 seems to be a result of the compiler's automatic vectorization, but if the compiler generated it, why am I getting this error? Do I need to link in some additional library?

Update:

Using nm, I was able to trace the function to libsvml but linking with that didn't help. Now herein seems to lie the problem: ia32intrin.h declares the function as follows:

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

But from nm's output, the symbol in the library is __svml_idivrem4. According to the header file, these are the same functions, but can I tell this to the l开发者_Go百科inker?


Recourse to Google points me to a file, on my Mac:

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

which contains a declaration of a symbol

_mm_idivrem_epi32

So it does look as if you are missing a linkage or include.


My guess is that the source file in question (phys_grid.f90?) doesn't have an implicit none statement. Without that, ifort will just assume there must be a routine somewhere matching that profile, and merrily compile it up and hand it to the linker for resolution.

Of course your next job is going to be to go find the code for that missing routine, or to figure out WTH it does so you can rewrite it.

0

精彩评论

暂无评论...
验证码 换一张
取 消