-1

На днях я установил компиляторы Intel и приложения, связанные с их Parallel Studio, и не могу скомпилировать без использования icc. При использовании gcc, clang или mpicc я получаю следующую ошибку:

In file included from z.main.c:13:0:
/opt/intel/include/math.h:29:3: error: #error "This Intel <math.h> is for
use with only the Intel compilers!"
# error "This Intel <math.h> is for use with only the Intel compilers!"
   ^
  main

Обычно я должен ссылаться на библиотеку math.h с помощью -lm , и это работает с другими файлами. Другие случаи, которые я проверял, не включают mpi.h , если это имеет значение.

Я не хочу удалять компиляторы Intel; Я надеялся исправить все проблемы, которые у меня были локально, прежде чем перейти к удаленной работе через ssh.

Обновить

Я запустил gcc fvm.c -c --trace -lm чтобы посмотреть, где он ищет математическую библиотеку. Вот результат:

gcc z.fvm.c -c --trace -lm
. /usr/include/stdio.h
.. /usr/include/features.h
... /usr/include/x86_64-linux-gnu/sys/cdefs.h
.... /usr/include/x86_64-linux-gnu/bits/wordsize.h
... /usr/include/x86_64-linux-gnu/gnu/stubs.h
.... /usr/include/x86_64-linux-gnu/gnu/stubs-64.h
.. /opt/intel/include/stddef.h
.. /usr/include/x86_64-linux-gnu/bits/types.h
... /usr/include/x86_64-linux-gnu/bits/wordsize.h
... /usr/include/x86_64-linux-gnu/bits/typesizes.h
.. /usr/include/libio.h
... /usr/include/_G_config.h
.... /opt/intel/include/stddef.h
.... /usr/include/wchar.h
... /opt/intel/include/stdarg.h
.. /usr/include/x86_64-linux-gnu/bits/stdio_lim.h
.. /usr/include/x86_64-linux-gnu/bits/sys_errlist.h
. /usr/include/stdlib.h
.. /opt/intel/include/stddef.h
.. /usr/include/x86_64-linux-gnu/bits/waitflags.h
.. /usr/include/x86_64-linux-gnu/bits/waitstatus.h
... /usr/include/endian.h
.... /usr/include/x86_64-linux-gnu/bits/endian.h
.... /usr/include/x86_64-linux-gnu/bits/byteswap.h
..... /usr/include/x86_64-linux-gnu/bits/wordsize.h
..... /usr/include/x86_64-linux-gnu/bits/byteswap-16.h
.. /usr/include/x86_64-linux-gnu/sys/types.h
... /usr/include/time.h
... /opt/intel/include/stddef.h
... /usr/include/x86_64-linux-gnu/sys/select.h
.... /usr/include/x86_64-linux-gnu/bits/select.h
..... /usr/include/x86_64-linux-gnu/bits/wordsize.h
.... /usr/include/x86_64-linux-gnu/bits/sigset.h
.... /usr/include/time.h
.... /usr/include/x86_64-linux-gnu/bits/time.h
... /usr/include/x86_64-linux-gnu/sys/sysmacros.h
... /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h
.... /usr/include/x86_64-linux-gnu/bits/wordsize.h
.. /usr/include/alloca.h
... /opt/intel/include/stddef.h
.. /usr/include/x86_64-linux-gnu/bits/stdlib-float.h
. /opt/intel/include/math.h
.. /usr/include/math.h
... /usr/include/x86_64-linux-gnu/bits/huge_val.h
... /usr/include/x86_64-linux-gnu/bits/huge_valf.h
... /usr/include/x86_64-linux-gnu/bits/huge_vall.h
... /usr/include/x86_64-linux-gnu/bits/inf.h
... /usr/include/x86_64-linux-gnu/bits/nan.h
... /usr/include/x86_64-linux-gnu/bits/mathdef.h
... /usr/include/x86_64-linux-gnu/bits/mathcalls.h
... /usr/include/x86_64-linux-gnu/bits/mathcalls.h
... /usr/include/x86_64-linux-gnu/bits/mathcalls.h
In file included from fvm.c:10:0:
/opt/intel/include/math.h:29:3: error: #error "This Intel <math.h> is for
use with only the Intel compilers!"
# error "This Intel <math.h> is for use with only the Intel compilers!"
   ^
. /usr/include/time.h
.. /opt/intel/include/stddef.h
.. /usr/include/x86_64-linux-gnu/bits/time.h
.. /usr/include/xlocale.h
. fvm.h
. lab_mpi.h
Multiple include guards may be useful for:
/usr/include/wchar.h
/usr/include/x86_64-linux-gnu/bits/byteswap-16.h
/usr/include/x86_64-linux-gnu/bits/byteswap.h
/usr/include/x86_64-linux-gnu/bits/endian.h
/usr/include/x86_64-linux-gnu/bits/huge_val.h
/usr/include/x86_64-linux-gnu/bits/huge_valf.h
/usr/include/x86_64-linux-gnu/bits/huge_vall.h
/usr/include/x86_64-linux-gnu/bits/inf.h
/usr/include/x86_64-linux-gnu/bits/mathdef.h
/usr/include/x86_64-linux-gnu/bits/nan.h
/usr/include/x86_64-linux-gnu/bits/select.h
/usr/include/x86_64-linux-gnu/bits/sigset.h
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h
/usr/include/x86_64-linux-gnu/bits/sys_errlist.h
/usr/include/x86_64-linux-gnu/bits/typesizes.h
/usr/include/x86_64-linux-gnu/bits/waitflags.h
/usr/include/x86_64-linux-gnu/bits/waitstatus.h
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h
/usr/include/x86_64-linux-gnu/gnu/stubs.h
fvm.h
lab_mpi.h

Как я могу сказать gcc, mpicc, где искать и игнорировать математическую библиотеку Intel?

Заранее спасибо.

1 ответ1

0

Заголовки Intel совместимы, но требуется небольшая модификация. Во-первых, вам нужно отключить источник ошибки.

//#if !defined(__INTEL_COMPILER)
//# error "This Intel <math.h> is for use with only the Intel compilers!"
//#endif

Затем вы должны включить отсутствующие заголовки.

#include <features.h>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .