使用CMake链接本地TBB库报错及替代链接方案咨询
TBB 正确链接的 CMake 方案
1. 优先使用官方提供的 find_package 方案
这是CMake官方推荐的第三方库链接方式,TBB本身自带CMake配置脚本,不用手动处理头目录、库路径、依赖关系:
# 先指定本地存放的TBB根目录 set(TBB_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/deps/tbb" CACHE PATH "本地TBB根路径") # 按需查找需要的TBB组件,常用组件包括tbb、tbbmalloc、tbbmalloc_proxy等 find_package(TBB REQUIRED COMPONENTS tbb tbbmalloc) add_executable(${PROJECT_NAME} src/main.cpp) # 直接链接TBB提供的导入目标,自动继承头目录、库依赖等配置 target_link_libraries(${PROJECT_NAME} PUBLIC TBB::tbb TBB::tbbmalloc)
使用该方案不需要手动写include_directories,导入目标会自动把TBB的头目录添加到编译参数中。
2. 手动创建导入目标(find_package失效时备用)
如果本地TBB的cmake配置损坏导致find_package找不到,可以手动定义导入目标,比零散调用find_library更规范,不会漏链接依赖库:
# 定义核心tbb库的导入目标 add_library(TBB::tbb SHARED IMPORTED) set_target_properties(TBB::tbb PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/deps/tbb/include" IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/deps/tbb/lib/intel64/gcc4.8/libtbb.so" ) # 按需添加其他TBB组件的导入目标,比如tbbmalloc add_library(TBB::tbbmalloc SHARED IMPORTED) set_target_properties(TBB::tbbmalloc PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/deps/tbb/include" IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/deps/tbb/lib/intel64/gcc4.8/libtbbmalloc.so" ) add_executable(${PROJECT_NAME} src/main.cpp) target_link_libraries(${PROJECT_NAME} PUBLIC TBB::tbb TBB::tbbmalloc)
你之前遇到的问题原因
- 第一次链接报
TBB_LIB-NOTFOUND是因为你错误拼接了CMAKE_PREFIX_PATH前缀,导致路径不匹配,改为项目相对路径后寻址正确。 - 第二次报未定义引用是因为
find_library单次调用只会返回第一个匹配到的库文件,你列了多个TBB相关库名,最终只链接了其中一个,缺少了必要的依赖库导致符号找不到。
内容的提问来源于stack exchange,提问作者Megidd
相关产品推荐
相关产品推荐

