【问题标题】:Can't compile C++ with openmp pragmas in Eclipse Neon无法在 Eclipse Neon 中使用 openmp pragma 编译 C++
【发布时间】:2017-07-29 00:52:33
【问题描述】:

我正在尝试使用 OpenMP 编译指示在 Eclipse Neon 2 中编译一个简单的 C++ 项目。

我已经安装了 libgomp1 包并且 find / -name gomp 提供了以下输出:

/usr/share/doc/gcc-5-base/gomp /usr/share/doc/libgomp1
/usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
/usr/lib/x86_64-linux-gnu/libgomp.so.1
/usr/lib/gcc/x86_64-linux-gnu/5/libgomp.a
/usr/lib/gcc/x86_64-linux-gnu/5/libgomp.so
/usr/lib/gcc/x86_64-linux-gnu/5/libgomp.spec

g++ 使用以下选项启动:

 -std=c++0x -I/usr/local/include -I/usr/local/include/opencv -O0 -g3 -Wall -c -fmessage-length=0 -fopenmp

以下代码:

#pragma omp parallel for
    for (int i=0;i++;i<r){
(...)

在 for 循环行生成此错误消息:

invalid controlling predicate
invalid increment expression

谁能告诉我我做错了什么?

【问题讨论】:

  • 你有你的循环测试表达式“i

标签: c++ linux eclipse openmp


【解决方案1】:

你在for语句中的顺序错误:

  1. 初始化
  2. 停止条件
  3. 增量

所以,你的循环应该是这样的

for( int i=0; i<r; i++ ) 

这是错误消息告诉您的内容:

"invalid control predicate" = 停止条件无效,因为在您的代码中,它是一个自增操作

"invalid increment expression" = 增量无效,因为在您的代码中,它是一个条件。

【讨论】:

  • 应该注意这些错误是特定于 OpenMP 的,因为 OpenMP for 只接受特殊的规范形式的循环。问题中显示的语句在其他方面毫无意义但有效的 C++。
  • 谢谢,是的,这很重要。
  • 虽然错误消息仅因 OpenMP 限制而发生(正如 Hristo 指出的那样),但它确实看起来像是串行代码中的一个真正的错误,因为循环永远不会执行。所以错误消息是特定于 OpenMP 的,但代码中的错误不是(OpenMP 帮助您找到了真正的错误!)
  • 好吧,我现在觉得有点无能:-)。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 2018-04-10
  • 2016-04-24
相关资源
最近更新 更多