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

Ubuntu20.04下C++17并行算法结合CMake链接TBB报错如何解决?

问题根因

Ubuntu 20.04官方源提供的libtbb-dev版本为2020.1,属于传统TBB版本,而非重构后的oneTBB,存在两个核心冲突:

  1. 旧版TBB的CMake配置不提供TBB::tbb导入目标,该目标是oneTBB 2021及以上版本才支持的特性,这是你修改配置后报目标找不到的直接原因
  2. 系统预编译的TBB库使用的C++ ABI和gcc 11默认启用的ABI不兼容,导致链接时符号不匹配,就是你最开始遇到的未定义符号错误

解决方案

方案一:适配系统自带旧版TBB(无需额外安装组件)

  1. 还原CMake配置,删除TBB::tbb相关写法,恢复使用旧版TBB的标准配置:
find_package(TBB REQUIRED)
# 替代原来的${TBB_IMPORTED_TARGETS}写法
target_include_directories(SigContrastFastAviUtl_test PRIVATE ${TBB_INCLUDE_DIRS})
target_link_libraries(SigContrastFastAviUtl_test ${TBB_LIBRARIES} Threads::Threads)
  1. 配置CMake时添加ABI兼容参数,对齐系统TBB的编译配置:
rm -rf build # 先清理之前的缓存
cmake -B build -DCMAKE_CXX_COMPILER=g++-11 -DCMAKE_C_COMPILER=gcc-11 -DCMAKE_CXX_FLAGS="-D_GLIBCXX_USE_CXX11_ABI=0"

如果还是报符号错误,把_GLIBCXX_USE_CXX11_ABI的值改为1重试即可。

方案二:升级到oneTBB(长期兼容性更好)

如果你希望使用TBB::tbb的现代CMake写法,可以卸载系统旧版TBB后安装oneTBB:

  1. 卸载系统自带TBB:
sudo apt remove -y libtbb-dev libtbb2
  1. 下载oneTBB预编译包解压安装到/usr/local目录,或添加第三方源安装oneTBB 2021+版本
  2. 此时你修改后的使用TBB::tbb的CMake配置即可正常运行,无需额外处理ABI兼容问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:54:03