使用TBB库编译报错:always_inline内联失败(目标选项不匹配)
解决TBB编译时
_tpause内联失败的错误 这个错误是因为_tpause函数属于Intel WAITPKG指令集扩展,GCC需要启用对应编译选项才能正确内联该函数。你的TBB版本(v2021.2.3)在WSL环境下没有自动添加该选项,导致编译器因目标架构不支持指令而内联失败。
解决方案
方案1:手动添加指令集编译选项
修改CMake脚本,给目标添加适配CPU指令集的编译参数,两种方式可选:
- 自动适配宿主CPU所有支持的指令集(推荐,WSL会继承宿主机CPU特性):
include(FetchContent) FetchContent_Declare( tbb GIT_REPOSITORY "https://github.com/oneapi-src/oneTBB" GIT_TAG "v2021.2.3" ) FetchContent_MakeAvailable(tbb) add_executable(TestTbb test_tbb.cpp) target_link_libraries(TestTbb PUBLIC TBB::tbb ) target_include_directories(TestTbb PRIVATE ${tbb_SOURCE_DIR}/include) # 添加编译选项 target_compile_options(TestTbb PRIVATE -march=native)
- 仅启用WAITPKG指令集:
# 替换上面的target_compile_options行 target_compile_options(TestTbb PRIVATE -mwaitpkg)
方案2:升级oneTBB版本
旧版本oneTBB的WSL编译配置存在兼容性问题,升级到v2023.1.0及以上版本后,可自动处理这类指令集依赖,无需手动添加选项:
FetchContent_Declare( tbb GIT_REPOSITORY "https://github.com/oneapi-src/oneTBB" GIT_TAG "v2023.1.0" # 或更高稳定版本 )
修改完成后,重新生成CMake缓存并执行编译,即可解决该错误。
内容的提问来源于stack exchange,提问作者TheBaum
相关产品推荐
相关产品推荐

