【发布时间】:2016-07-12 07:53:40
【问题描述】:
我想通过使用 tbb::task_scheduler_observer 连接到 tbb::task_arena。根据文档,这应该像shown here 一样工作。但是,当我尝试编译以下代码时
#define TBB_PREVIEW_TASK_ARENA 1
#include "tbb/task_scheduler_observer.h"
#include "tbb/task.h"
#include "tbb/task_arena.h"
class MyObserver : public tbb::task_scheduler_observer
{
public:
MyObserver( tbb::task_arena &a ) : tbb::task_scheduler_observer(a)
{
observe(true); // activate the observer
}
/*override*/ void on_scheduler_entry( bool worker )
{
// Do something here
}
/*override*/ void on_scheduler_exit( bool worker ) { }
};
和
#define TBB_PREVIEW_TASK_ARENA 1
#include "tbb/task_arena.h"
int main()
{
tbb::task_arena a;
MyObserver my(a);
}
我得到一个
undefined refference to `tbb::task_arena::internal_terminate()`
错误。使用 -ltbb 标志编译时,其他 tbb 函数(和类)工作正常。
我使用启用了 -std=c++11 的 Ubuntu 14.04 和 g++ 4.8.4。
【问题讨论】:
-
哪一行给你错误?我的意思是:如果您评论
MyObserver my(a);行,您也会遇到同样的错误? -
是的。它仍然会发生。
-
当您链接错误版本的 libtbb 时会发生这种情况。你有链接吗?请显示您的链接命令
-
g++ -o test my_observer.cpp main.cpp -ltbb -std=c++11这是错误的版本吗?它适用于所有其他 tbb 功能。
标签: c++ c++11 g++ tbb linker-errors