我只是试着用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脚本。但帮不上什么忙。
有什么想法吗?
如果想并行化一些循环,我甚至需要包括omp.h吗?也许我可以简单地省略#include <omp.h>。
发布于 2018-02-23 09:08:58
不幸的是,ICC 11.0不支持__builtin_bswap32和__builtin_bswap64。您可能会得到这些错误,因为byteswap.h是由omp.h和stdlib.h内部包含的。这个问题在本LLVM错误报告中也有报道。
基本上,您的系统标头是“更新的”,与ICC 11.0不兼容。
由于在更新的ICC版本(至少从13.0开始,根据编译器资源管理器)中支持builtins,一个选项是升级到更新的ICC。
或者,您将需要使用与ICC 11.0兼容的标准标头,而不是您的系统标头,正如在这个Intel Developer Zone 线程中所解释的那样。方法之一是安装一个GCC版本,它“匹配”ICC 11.0,然后告诉ICC使用与GCC捆绑的标题。根据维基百科的说法,ICC11.0是在2008年11月发布的,所以GCC 4.2发布系列可能是兼容的(其他GCC释放见这里)。
https://stackoverflow.com/questions/48846773
复制相似问题