Intel icc bricht gcc mit math.h unter Linux

1459
Bob Dobalina

Ich habe vor kurzem Intels Compiler und Anwendungen installiert, die zusammen mit Parallel Studio gebündelt wurden, und ich kann nicht ohne icc kompilieren. Bei der Verwendung von gcc, clang oder mpicc erhalte ich folgende Fehlermeldung:

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 

Normalerweise muss ich die math.hBibliothek mit verknüpfen -lm, und das funktioniert auch mit anderen Dateien. Die anderen Fälle, die ich getestet habe, schließen nicht ein mpi.h, wenn es darauf ankommt.

Ich möchte die Intel-Compiler nicht deinstallieren. Ich hatte gehofft, die Probleme, die ich lokal habe, zu beheben, bevor ich per ssh aus der Ferne arbeite.

Aktualisieren

Ich lief, um gcc fvm.c -c --trace -lmzu sehen, wo es nach der Mathematikbibliothek suchte. Hier ist das Ergebnis:

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 

Wie kann ich gcc, mpicc mitteilen, wo ich die Intel-Mathematikbibliothek ansehen und ignorieren soll?

Danke im Voraus.

-1
Geben Sie den von Ihnen verwendeten gcc-Befehl ein, der angibt, dass Sie math.h NICHT im Ordner `/ Intel / include /` verwenden. Wenn Ihr Betriebssystem über Systemvariablen verfügt, kommentieren Sie die Intel-Variable aus. Ramhound vor 9 Jahren 0
Ok, der icc-Compiler funktioniert nach weiteren Untersuchungen nur in einem Verzeichnis. Wie kann ich es entweder von überall aus zugänglich machen oder einfach meine gcc, mpicc ... wiederherstellen? Bob Dobalina vor 9 Jahren 0
Ändern Sie alle .h- und .c-Dateien, um `/ usr / include / math.h 'anstelle von` / opt / intel / include / math.h' zu verwenden Ramhound vor 9 Jahren 0
Das hat alles zum Laufen gebracht. Danke noch einmal. Bob Dobalina vor 9 Jahren 0

1 Antwort auf die Frage

0
Wiffzack

Intel-Header sind kompatibel, aber eine kleine Änderung ist erforderlich. Zunächst müssen Sie die Fehlerquelle ausschalten.

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

Dann sollten Sie fehlende Header einschließen.

#include <features.h>