链接 tbb::task_arena 和 tbb::task_scheduler_observer 时出错
Error while linking with tbb::task_arena and tbb::task_scheduler_observer
我想使用 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()`
错误。其他 tbb 函数(和 类)在使用 -ltbb 标志编译时工作正常。
我使用 Ubuntu 14.04 和启用了 -std=c++11 的 g++ 4.8.4。
回答我自己的问题,这是解决问题的方法。显然,采用 tbb::task_arena 的 task_scheduler_observer 是社区预览功能。您需要在包含 header
之前启用它
#define TBB_PREVIEW_LOCAL_OBSERVER 1
#include "tbb/task_scheduler_observer.h"
会成功的。现在编译好了。此外,我从源代码构建库,而不是使用 ubuntu 存储库中提供的库。有可用的 CMake 构建 here
我想使用 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()`
错误。其他 tbb 函数(和 类)在使用 -ltbb 标志编译时工作正常。
我使用 Ubuntu 14.04 和启用了 -std=c++11 的 g++ 4.8.4。
回答我自己的问题,这是解决问题的方法。显然,采用 tbb::task_arena 的 task_scheduler_observer 是社区预览功能。您需要在包含 header
之前启用它#define TBB_PREVIEW_LOCAL_OBSERVER 1
#include "tbb/task_scheduler_observer.h"
会成功的。现在编译好了。此外,我从源代码构建库,而不是使用 ubuntu 存储库中提供的库。有可用的 CMake 构建 here