无法在 Linux 上使用 GCC 运行 C++17 并行算法

如何解决无法在 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 教程 :-)

另见:https://github.com/oneapi-src/oneTBB/issues/243

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?