【问题标题】:icc: including omp.h requires byteswap.hicc:包括 omp.h 需要 byteswap.h
【发布时间】:2018-02-17 23:01:40
【问题描述】:

刚刚尝试使用 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,也会发生同样的情况。

我真的很困惑,我什至不知道字节交换有什么好处。我在编译之前已经发布了iccvars_intel64.sh 脚本。不过也没多大用。

有什么想法吗?

P.S.:如果想并行化一些循环,我什至需要包含 omp.h 吗?也许我可以简单地省略#include <omp.h>

【问题讨论】:

    标签: c++ compiler-errors icc


    【解决方案1】:

    很遗憾,ICC 11.0 不支持__builtin_bswap32__builtin_bswap64。由于byteswap.h 包含在omp.hstdlib.h 内部,您可能会遇到这些错误。此问题也已在此LLVM bug report 中报告。

    基本上,您的系统标头“较新”且与 ICC 11.0 不兼容。

    由于更新的 ICC 版本(至少从 13.0 起,根据Compiler Explorer)支持 bswap 内置函数,因此一种选择是升级到更新的 ICC。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      相关资源
      最近更新 更多