ifort linker неопределенная ссылка - PullRequest
1 голос
/ 01 июля 2010

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

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 ]

1 голос
/ 01 июля 2010

Обращение к Google указывает мне файл на моем Mac:

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

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

_mm_idivrem_epi32

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

0 голосов
/ 01 июля 2010

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

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

...