Intel ICC ломает GCC с Math.h на Linux

1438
Bob Dobalina

На днях я установил компиляторы 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
предоставьте команду gcc, которую вы используете, которая указывает НЕ использовать math.h в папке `/ Intel / include /`. Если в вашей ОС есть системные переменные, закомментируйте переменную Intel. Ramhound 8 лет назад 0
Хорошо, после дальнейшего изучения, компилятор icc работает только в одном каталоге. Как я могу сделать его доступным из любого места или просто восстановить мой рабочий gcc, mpicc ...? Bob Dobalina 8 лет назад 0
Измените все файлы .h и .c, чтобы использовать `/ usr / include / math.h` вместо` / opt / intel / include / math.h` Ramhound 8 лет назад 0
Это все работает. Еще раз спасибо. Bob Dobalina 8 лет назад 0

1 ответ на вопрос

0
Wiffzack

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

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

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

#include <features.h> 

Похожие вопросы