icc:包括omp.h需要byteswap.h

问题描述 投票:0回答:1

刚尝试使用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>

c++ compiler-errors icc
1个回答
2
投票

不幸的是,ICC 11.0不支持__builtin_bswap32__builtin_bswap64。你可能会得到这些错误,因为byteswap.homp.hstdlib.h内部包含在内。这个LLVM bug report也报道了这个问题。

基本上,您的系统头是“更新”,与ICC 11.0不兼容。

由于bswap内置版在最近的ICC版本中得到支持(至少自13.0以来,根据Compiler Explorer),一种选择是升级到更新的ICC。

或者,您需要使用与ICC 11.0兼容的标准标头,而不是系统标准标头,如本开发人员专区thread中所述。一种方法是安装一个“匹配”ICC 11.0的GCC版本,然后告诉ICC使用与该GCC捆绑的标头。根据Wikipedia,ICC 11.0于2008年11月发布,因此GCC 4.2发布系列可能兼容(请参阅此处了解其他GCC releases)。

© www.soinside.com 2019 - 2024. All rights reserved.