3

我正在尝试使用 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。如何解决这种混乱?

4

2 回答 2

6

问题出在我编译的代码中。我们包括 malloc 标头,这对于 ICC 和 GCC 是不同的。还有 GCC 标头名称。

解决方案是:

#if defined(__INTEL_COMPILER)
#include <malloc.h>
#else
#include <mm_malloc.h>
#endif // defined(__GNUC__)
于 2013-08-13T19:29:58.057 回答
1

我遇到了同样的问题,英特尔编译器对 gcc 头文件 <mm_malloc.h> 中的声明感到困惑,但在我的情况下,该头文件被我不想更改的库头文件拖入。

对我有用的是通过使用#define 触发其自己的包含防护来全局禁用 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 也可以。

于 2013-09-08T22:34:15.090 回答