2010-07-01 5 views
1

Я составляю большую систему HPC, написанную на Fortran с использованием компилятора Intel (ifort). Есть около нескольких сот отдельных модулей и все они компилироваться, но компоновщик бросает эту ошибку:ifort linker undefined reference

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

_mm_idivrem_epi32, кажется, являются результатом автоматической векторизации компилятора, но если компилятор, то почему я Я получаю эту ошибку? Нужно ли мне связать какую-то дополнительную библиотеку?

Update:

Используя nm, я был в состоянии проследить функцию libsvml, но связь с этим не помогло. Теперь здесь, как представляется, лежит проблема: ia32intrin.h объявляет функцию следующим образом:

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

Но с выходом nm «s, символ в библиотеке __svml_idivrem4. Согласно файлу заголовка, это те же функции, но могу ли я сказать это компоновщику?

ответ

0

Мое предположение заключается в том, что в исходном файле (phys_grid.f90?) Нет оператора implicit none. Без этого ifort просто предположит, что должна быть процедура, соответствующая этому профилю, и весело скомпилировать ее и передать ее компоновщику для разрешения.

Конечно, ваша следующая работа будет заключаться в том, чтобы найти код для этой пропущенной процедуры или определить WTH, чтобы она могла переписать ее.

1

Регресс в Google указывает мне файл, на моем Mac:

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

, который содержит объявление символа

_mm_idivrem_epi32 

Так это выглядит, как если бы вы пропускаете связь или включают.

+0

У меня это не было, но я запускаю версию 9.1, и похоже, что у вас 11.1. Касабланка, какую версию компилятора вы используете? –

+0

Я использую версию 11.1. В самом деле, заголовочный файл Mark упомянутый содержит объявление для _mm_idivrem_epi32, но я все еще пытаюсь выяснить, с какой именно библиотекой мне нужно установить связь. – casablanca