我正在尝试使用ICC编译代码并面临错误:
/opt/intel/composer_xe_2013.2.146/compiler/include/xmmintrin.h(82): error:
linkage specification is incompatible with previous "_mm_malloc" (declared at
line 38 of "/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include/mm_malloc.h")
extern void* __ICL_INTRINCC _mm_malloc(size_t, size_t);
看起来像ICC和GCC冲突。但我无法从$ PATH中排除GCC。如何解决这种混乱?
答案 0 :(得分:6)
问题出在我编译的代码中。 我们包括malloc头,这对ICC和GCC是不同的。并且有GCC标题名称。
解决方案是:
#if defined(__INTEL_COMPILER)
#include <malloc.h>
#else
#include <mm_malloc.h>
#endif // defined(__GNUC__)
答案 1 :(得分:1)
我遇到了同样的问题,英特尔编译器对gcc标题中的声明&lt; mm_malloc.h&gt;感到困惑,但在我的情况下,标题被库标题拖入,我不想改变
对我来说有用的是通过使用#define触发自己的include guard来全局禁用mm_malloc.h,如:
icc -D_MM_MALLOC_H_INCLUDED=1 main.cpp -o main
您也可以使用相同的#define:
在单个文件或标头中禁用它#ifdef __INTEL_COMPILER
# define _MM_MALLOC_H_INCLUDED 1 /* disables gcc's <mm_malloc.h>, for Intel */
#endif
英特尔编译器从xmmintrin(或其他SSE / AVX标头)中获取自己的mm_malloc定义,所以即使有人调用mm_malloc也可以这样做。