两个编译器互不喜欢
Two compilers do not like each other
我试图用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);
看起来国际商会和海湾合作委员会有冲突。但我不能将GCC排除在$PATH之外。如何解决这种困惑?
问题出在我编译的代码中。我们包括malloc头,这对于ICC和GCC是不同的。还有GCC标头名称。
解决方案是:
#if defined(__INTEL_COMPILER)
#include <malloc.h>
#else
#include <mm_malloc.h>
#endif // defined(__GNUC__)
我遇到了同样的问题,英特尔编译器被gcc标头中的声明弄糊涂了<mm_ alloc.h>,但在我的例子中,这个头被一个库头拖了进来,我不想更改。
对我来说有效的是全局禁用mm_malloc.h,方法是用#define触发它自己的include-guard,比如:
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。
相关文章:
- decltype(1, t) 应该是 l 值引用吗?(编译器不同意)
- 为什么 Clang 不喜欢__DATE__宏?
- 安装MinGW后C++编译器不起作用?
- 编译器不会使用 -std=c++11 编译智能指针
- 为什么编译器不检查被覆盖函数的存储类?
- Clang编译器不支持aarch64-apple-darwin上的-fxray-instrument
- 为什么C++编译器不能做更好的常量折叠?
- 如何在构造函数中传递 const 引用时强制编译器不接受右值
- 如果函数包含静态变量,为什么编译器不执行内联?
- 为什么 C 编译器不在 for 循环体中给出重新声明错误?
- 为什么T是未定义的?我正在尝试实现一个用于双链表的节点类,它不喜欢我使用友元运算符后的T
- 为什么编译器不在同一翻译单元中警告 ODR 违规
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 如果条件取决于模板类型并且在编译时已知,是否可以保证C++编译器不会生成分支?
- C++语法错误,编译器不会警告或 int v = func(&v) 出错;
- Visual Studio生成"Error: uninitialized local variable 'x' "而在线编译器不会 - 为什么?
- 为什么编译器不能优化这个 std::string 构造?
- C++编译器不喜欢"using INLINE = extern inline"
- 无法构建 quazip。MOC 编译器不会运行。命令行未找到相关类
- 编译器不喜欢我的类C++。获取未声明的标识符错误等