You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下使用MinGW+CMake编译TBB出现unknown-pragmas错误求助

报错根本原因

oneTBB默认开启了「将所有警告视为错误」的编译规则,而#pragma intrinsic是MSVC编译器专用的编译指令,MinGW的GCC无法识别该指令,触发了未知pragma警告,进而被判定为编译错误。
之前使用预编译二进制出现未定义引用问题,是因为公开的预编译oneTBB包大多是MSVC编译器构建的,和MinGW的ABI不兼容,无法直接链接使用,自行用MinGW编译的思路是正确的。

解决方案

按以下步骤操作即可完成编译:

  • 第一步:生成MinGW构建文件时添加额外参数,关闭TBB的Werror规则并忽略未知pragma警告,执行命令:
    cmake .. -G "MinGW Makefiles" -DTBB_ENABLE_WERROR=OFF -DCMAKE_CXX_FLAGS="-Wno-unknown-pragmas"
    如果需要自定义安装路径,可以额外添加参数-DCMAKE_INSTALL_PREFIX=自定义安装路径。
  • 第二步:执行编译命令
    任选cmake --build .或者mingw32-make其一执行即可,编译速度取决于设备性能。
  • 第三步:安装并配置环境
    编译完成后执行mingw32-make install将头文件、库文件安装到指定目录。后续编译你的项目时,cmake命令添加-DTBB_ROOT=你的TBB安装路径即可让find_package正确找到你编译的TBB版本,同时建议将TBB安装路径下的bin目录加入系统环境变量PATH,避免运行时找不到动态库。

备选修复方案

如果添加上述cmake参数后仍然报错,可以直接修改oneTBB源码中的头文件:
找到include/oneapi/tbb/detail/_machine.h的第67行,将原有的#pragma intrinsic(_mm_mfence)用MSVC专用宏包裹,修改后内容如下:

#ifdef _MSC_VER
#pragma intrinsic(_mm_mfence)
#endif

修改完成后重新执行编译命令即可。

内容的提问来源于stack exchange,提问作者Kyllian Lissens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:09:01