调试Intel TBB时TBB_USE_DEBUG宏重定义警告问题咨询
解决TBB_USE_DEBUG重定义警告的方法
这个警告的核心原因很明确:TBB_USE_DEBUG宏已经被定义过了——要么是你在编译命令里已经通过-D参数设置了这个宏,要么是你代码里包含的TBB头文件(比如/usr/include下的)本身已经定义了它,而你又在主函数开头重复定义了一次,所以编译器抛出了重定义警告。
这里给你几个靠谱的解决思路:
推荐做法:通过编译参数传递宏定义
按照TBB文档的要求,启用调试检查功能的正确方式是在编译阶段传递宏,而不是在代码里硬编码。比如用GCC编译时,把编译命令改成这样:g++ your_code.cpp -o your_program -DTBB_USE_DEBUG=1 -ltbb这样宏是全局生效的,而且不会和任何头文件里的定义冲突,也不用修改代码,后续切换调试/发布模式只需要调整编译参数就行。
如果非要在代码里定义:调整定义位置
如果你坚持要在代码里定义这个宏,一定要把#define TBB_USE_DEBUG 1放在所有TBB头文件的#include语句之前,比如:#define TBB_USE_DEBUG 1 #include <tbb/parallel_for.h> #include <tbb/task_scheduler_init.h> int main() { // 你的代码逻辑 return 0; }这样编译器会先处理你的宏定义,后面包含的TBB头文件就不会触发重复定义的警告了(从你的报错来看,当前TBB头文件没有用
#ifndef保护这个宏,所以必须保证只定义一次)。排查系统TBB的默认配置
你可以打开/usr/include/tbb/tbb_config.h(或类似的配置头文件)看看,里面是不是已经有#define TBB_USE_DEBUG的语句了。如果系统自带的TBB已经默认开启了调试模式,那你完全不需要再手动定义这个宏,直接编译即可。
内容的提问来源于stack exchange,提问作者Raphael D.
相关产品推荐
相关产品推荐

