运行 无法在 Linux 上使用 GCC 使用 C++17 并行算法
Can't run C++17 parallel algorithms with GCC on Linux
我想 运行 使用 GCC9.3 的 C++17 执行策略的标准算法。
我已经下载了https://github.com/oneapi-src/oneTBB/releases/download/v2021.1.1/oneapi-tbb-2021.1.1-lin.tgz
但我收到“任务”class 未定义的错误
即使是来自 https://www.ibm.com/developerworks/aix/library/au-intelthreadbuilding/index.html
的“hello world”示例
#include "tbb/tbb.h"
#include <iostream>
using namespace tbb;
using namespace std;
class first_task : public task {
public:
task* execute( ) {
cout << "Hello World!\n";
return NULL;
}
};
int main( )
{
task_scheduler_init init(task_scheduler_init::automatic);
first_task& f1 = *new(tbb::task::allocate_root()) first_task( );
tbb::task::spawn_root_and_wait(f1);
}
我收到以下错误:
test.cpp:55:32: error: expected class-name before '{' token
55 | class first_task : public task {
| ^
test.cpp:57:5: error: 'task' does not name a type
57 | task* execute( ) {
| ^~~~
test.cpp: In function 'int main()':
test.cpp:65:5: error: 'task_scheduler_init' was not declared in this scope
65 | task_scheduler_init init(task_scheduler_init::automatic);
| ^~~~~~~~~~~~~~~~~~~
test.cpp:66:38: error: 'allocate_root' is not a member of 'tbb::v1::task'
66 | first_task& f1 = *new(tbb::task::allocate_root()) first_task( );
| ^~~~~~~~~~~~~
test.cpp:67:16: error: 'spawn_root_and_wait' is not a member of 'tbb::v1::task'
67 | tbb::task::spawn_root_and_wait(f1);
| ^~~~~~~~~~~~~~~~~~~
我正在编译:使用以下命令:
g++ -I<path_to_tbb>/oneapi-tbb-2021.1.1/include/oneapi -I<path_to_tbb>/oneapi-tbb-2021.1.1/include/oneapi/tbb -I<path_to_tbb>/oneapi-tbb-2021.1.1/include -L<path_to_tbb>/oneapi-tbb-2021.1.1/lib/intel64/gcc4.8/ test.cpp -o test
来自 的 运行ning source env/var.h
没有帮助
我做错了什么吗?
谢谢
从错误消息中我得出结论,您使用的 gcc 或 TBB 实现是一种实验性的。如您所见,gcc 确实找到了 TBB(#include tbb/tbb.h
上没有错误),这很好!然后,错误显示您使用的某些函数隐藏在 tbb::v1
命名空间内。因此,您可以在所有“未知”名称前使用 using namespace tbb::v1
或添加 tbb::v1::
。
然后,在
https://community.intel.com/t5/Intel-oneAPI-Threading-Building/Unable-to-compile-TBB-program/td-p/1226663
他们说 tbb::task
已贬值。请使用更现代的 TBB 教程:-)
我想 运行 使用 GCC9.3 的 C++17 执行策略的标准算法。
我已经下载了https://github.com/oneapi-src/oneTBB/releases/download/v2021.1.1/oneapi-tbb-2021.1.1-lin.tgz
但我收到“任务”class 未定义的错误 即使是来自 https://www.ibm.com/developerworks/aix/library/au-intelthreadbuilding/index.html
的“hello world”示例#include "tbb/tbb.h"
#include <iostream>
using namespace tbb;
using namespace std;
class first_task : public task {
public:
task* execute( ) {
cout << "Hello World!\n";
return NULL;
}
};
int main( )
{
task_scheduler_init init(task_scheduler_init::automatic);
first_task& f1 = *new(tbb::task::allocate_root()) first_task( );
tbb::task::spawn_root_and_wait(f1);
}
我收到以下错误:
test.cpp:55:32: error: expected class-name before '{' token
55 | class first_task : public task {
| ^
test.cpp:57:5: error: 'task' does not name a type
57 | task* execute( ) {
| ^~~~
test.cpp: In function 'int main()':
test.cpp:65:5: error: 'task_scheduler_init' was not declared in this scope
65 | task_scheduler_init init(task_scheduler_init::automatic);
| ^~~~~~~~~~~~~~~~~~~
test.cpp:66:38: error: 'allocate_root' is not a member of 'tbb::v1::task'
66 | first_task& f1 = *new(tbb::task::allocate_root()) first_task( );
| ^~~~~~~~~~~~~
test.cpp:67:16: error: 'spawn_root_and_wait' is not a member of 'tbb::v1::task'
67 | tbb::task::spawn_root_and_wait(f1);
| ^~~~~~~~~~~~~~~~~~~
我正在编译:使用以下命令:
g++ -I<path_to_tbb>/oneapi-tbb-2021.1.1/include/oneapi -I<path_to_tbb>/oneapi-tbb-2021.1.1/include/oneapi/tbb -I<path_to_tbb>/oneapi-tbb-2021.1.1/include -L<path_to_tbb>/oneapi-tbb-2021.1.1/lib/intel64/gcc4.8/ test.cpp -o test
运行ning source env/var.h
没有帮助
我做错了什么吗?
谢谢
从错误消息中我得出结论,您使用的 gcc 或 TBB 实现是一种实验性的。如您所见,gcc 确实找到了 TBB(#include tbb/tbb.h
上没有错误),这很好!然后,错误显示您使用的某些函数隐藏在 tbb::v1
命名空间内。因此,您可以在所有“未知”名称前使用 using namespace tbb::v1
或添加 tbb::v1::
。
然后,在
https://community.intel.com/t5/Intel-oneAPI-Threading-Building/Unable-to-compile-TBB-program/td-p/1226663
他们说 tbb::task
已贬值。请使用更现代的 TBB 教程:-)