安装OpenVDB依赖后引入<execution>头文件遇TBB链接错误求助
解决gcc 11.2.0引入后TBB未定义引用的问题
方案1:恢复无需链接TBB的状态
安装OpenVDB后,系统中的TBB库被标准库检测到,导致<execution>默认启用了TBB并行后端。可以通过编译时定义宏强制切换到串行后端:
- 在CMakeLists.txt中添加编译定义:
target_compile_definitions(your_target PRIVATE _GLIBCXX_PARALLEL_BACKEND=serial) - 手动编译时添加编译选项:
g++ -std=c++20 your_code.cpp -o your_app -D_GLIBCXX_PARALLEL_BACKEND=serial -lGL ...
这个宏会让标准库的并行算法使用串行实现,完全绕过TBB依赖,回到你之前的工作状态。
方案2:正确链接TBB解决未定义引用
如果需要保留并行功能,检查以下几点修正链接配置:
- CMake配置顺序问题
确保TBB的链接目标放在所有依赖之后,且使用官方的CMake目标:find_package(TBB REQUIRED) add_executable(your_app your_code.cpp) # 先链接OpenGL等其他库,最后链接TBB target_link_libraries(your_app PRIVATE OpenGL::GL ... TBB::tbb) - 手动编译的链接顺序
链接器按从左到右的顺序解析符号,-ltbb必须放在引用TBB符号的代码/库之后:g++ -std=c++20 your_code.cpp -o your_app -lGL -ltbb - 检查TBB版本匹配
OpenVDB可能安装了与gcc默认依赖不同版本的TBB,导致符号不兼容。执行以下命令确认系统TBB版本:
若版本不匹配,可指定gcc使用OpenVDB安装的TBB路径,或重新安装与gcc兼容的TBB版本。pkg-config --modversion tbb
内容的提问来源于stack exchange,提问作者niran90
相关产品推荐
相关产品推荐

