如何解决无法在 Linux 上使用 GCC 运行 C++17 并行算法
我想使用 GCC9.3 使用 C++17 中的执行策略运行标准算法。
我已经下载了 https://github.com/oneapi-src/oneTBB/releases/download/v2021.1.1/oneapi-tbb-2021.1.1-lin.tgz
但我收到一个错误,提示“任务”类未定义 即使在 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
从 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 教程 :-)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。