刚刚尝试使用icc-11编译我的代码(与gcc完美配合)。
如果包含omp.h
,则会出现以下错误:
/usr/include/bits/byteswap.h(47): error: identifier "__builtin_bswap32" is undefined
return __builtin_bswap32 (__bsx);
^
/usr/include/bits/byteswap.h(111): error: identifier "__builtin_bswap64" is undefined
return __builtin_bswap64 (__bsx);
如果我包含
stdlib.h
,也会发生同样的情况。我真的很困惑,甚至不知道byteswap有什么用。在编译之前,我已经发布了
iccvars_intel64.sh
脚本。虽然没有太大帮助。有任何想法吗?
P.S .:如果要并行处理某些循环,是否还需要包括
omp.h
?也许我可以简单地省略#include <omp.h>
。 最佳答案
不幸的是,ICC 11.0不支持__builtin_bswap32
和__builtin_bswap64
。您可能会遇到这些错误,因为byteswap.h
和omp.h
内部包含stdlib.h
。此LLVM bug report中也报告了此问题。
基本上,您的系统头是“较新的”,并且与ICC 11.0不兼容。
由于bswap内置函数在较新的ICC版本中受支持(至少从13.0开始,根据Compiler Explorer),因此一种选择是升级到较新的ICC。
或者,您将需要使用与ICC 11.0兼容的标准 header ,而不是系统 header ,如本英特尔开发人员专区thread中所述。一种方法是安装与“ICC 11.0”“匹配”的GCC版本,然后告诉ICC使用与该GCC bundle 在一起的 header 。根据
Wikipedia,ICC 11.0于2008年11月发布,因此GCC 4.2发行版可能兼容(其他GCC releases参见此处)。
关于c++ - icc : including omp.h requires byteswap.h,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48846773/