如何在 OS X 中包含 omp.h?

Posted

技术标签:

【中文标题】如何在 OS X 中包含 omp.h?【英文标题】:How to include omp.h in OS X? 【发布时间】:2014-11-17 09:01:57 【问题描述】:

我是 C 新手,在 OS X 中编译我的代码时遇到了一些问题。

我在 Eclipse 中编写了很多 Java 代码,并使用终端来编译我的代码。但是现在我正在学习 openMP 并且遇到了麻烦。

首先我下载了​​ Xcode 来编写 openMP 代码,但它无法识别 <omp.h>。然后我安装了g++。当我在终端中输入g++ -v 时,我得到了这个:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix

但是当我使用g++ Mesh.cpp -fopenmp 时,我仍然得到

Mesh.cpp:4:10: fatal error: 'omp.h' file not found
#include <omp.h>
         ^
1 error generated.

然后我尝试将 PTP 安装到我的 Eclipse 中并遇到了同样的问题。 我以为我的 MacBook 里没有 omp.h,所以我搜索了一下,在 gcc-4.9.1/build/ 下的文件夹下找到了几个 omp.h

问题来了。根据 Java 经验,我拥有该文件但无法使用它的唯一原因是类路径错误。但是,我不知道如何在 g++、Xcode 或 Eclipse 中更改此配置。但既然我可以包含&lt;stdio.h&gt; 之类的文件并使用所有IDE 编译它,我怎么不能对&lt;omp.h&gt; 做同样的事情?

我注意到的另一件事是 gcc 文件夹版本是 4.9.1,但是当我在终端中输入 gcc -v 时,我在输入 g++ -v 时得到相同的结果

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix

版本信息不应该说明4.9.1吗?就像java -version 显示的一样

java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)

感谢阅读。任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

MacOS 似乎包含该库,但如果您仅使用 XCode 则找不到它:

#include <omp.h>

但是,如果您没有安装该库,您可以通过使用 HomeBrew 安装它来简单地添加它:

brew install libomp

完成此操作后,只需将库包含代码替换为以下代码:

#include "/usr/local/opt/libomp/include/omp.h"

或者在使用 brew 安装 libomp 后终端显示的路径。

【讨论】:

【参考方案2】:

这个命令可以帮助你

brew 安装 libomp

brew info libomp
libomp: stable 6.0.1 (bottled)
LLVM's OpenMP runtime library
https://openmp.llvm.org/
/usr/local/Cellar/libomp/6.0.1 (12 files, 1.2MB) *
  Poured from bottle on 2018-11-20 at 16:12:22
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/libomp.rb
==> Dependencies
Build: cmake ✘
==> Requirements
Required: macOS >= 10.10 ✔
==> Caveats
On Apple Clang, you need to add several options to use OpenMP's front end
instead of the standard driver option. This usually looks like
  -Xpreprocessor -fopenmp -lomp

You might need to make sure the lib and include directories are discoverable
if /usr/local is not searched:

  -L/usr/local/opt/libomp/lib -I/usr/local/opt/libomp/include

For CMake, the following flags will cause the OpenMP::OpenMP_CXX target to
be set up correctly:
  -DOpenMP_CXX_FLAGS="-Xpreprocessor -fopenmp -I/usr/local/opt/libomp/include" -DOpenMP_CXX_LIB_NAMES="omp" -DOpenMP_omp_LIBRARY=/usr/local/opt/libomp/lib/libomp.dylib

【讨论】:

欢迎。它有什么作用?它将如何提供帮助?请参阅How to Answer 并接受欢迎tour。 对于那些使用自制软件的人来说,这是真正的解决方案。【参考方案3】:

omp.h 文件已移至子目录。我在 MacPorts 中找到了它,并通过创建指向该文件的链接解决了这个编译问题:

sudo ln -s /opt/local/include/libomp/omp.h /opt/local/include/omp.h

【讨论】:

MacPorts 有一个变种:sudo port install libomp +top_level【参考方案4】:

GCC 4.9.1 通常不随 OS X 一起提供(实际上不再随 Xcode 提供 GCC)。您的必须是通过其他方式安装的,例如如here 所述,自制或自编译。您可能缺少的是正确设置PATH 变量或额外安装的编译器具有版本后缀的二进制文件,即gcc-4.9g++-4.9 而不是简单的gcc / g++

正如@rubenvb 已经提到的,Apple 使用类似 GCC 的名称对 Clang 可执行文件进行符号链接。我个人认为这是一种不好的做法,因为 Xcode 附带的最新 Clang 版本会对无法识别的命令行选项(例如 GCC 前端特定选项)做出反应,并出现硬错误。

【讨论】:

我完全按照您提到的链接安装了 GCC,但它仍然无法正常工作... 如果您按照链接页面上的说明进行操作,那么您的编译器将命名为 g++-4.9,并且您必须明确添加其路径,除非您安装到 /usr/local/bin。此外,您必须重新配置 PTP 以调用 g++-4.9 而不是 g++ 谢谢!输入“export PATH=/usr/gcc-4.9.1/bin:$PATH”后,我现在可以使用“g++-4.9”了。【参考方案5】:

gccg++ 命令与 XCode 不同:Apple 认为将 Clang 伪装成 GCC 以使转换更顺畅是个好主意。

Clang OpenMP 支持仍在开发中。如果我没有错过任何 WIP 代码的大版本,您需要构建 this version of clang 并使用它。

当然,您始终可以通过 Homebrew 或 macports 等工具安装真正的 GCC,这些工具将提供 OpenMP 支持。

【讨论】:

所以基本上问题是我笔记本电脑中的 GCC 是 Clang 的假冒产品?由于后者不支持openMP,它会导致所有问题吗?谢谢。 @user3928256 是的,您执行的 gcc 命令是由 XCode 提供的,并且真的只是 Clang。我确实错过了您提到安装 GCC 4.9.1 的问题部分。所以,如果你按照@Hristo 的描述设置你的 PATH,你应该没问题。 来自链接网站的更新:clang/llvm 编译器中 OpenMP 支持的开发活动已移至 www.llvm.org。请获取启用 OpenMP 的 clang(在 clang/llvm 3.7 中完全支持 OpenMP 3.1)并为其进一步开发做出贡献。本网站仅用于存档目的。 如果你是brew install gcc,你可以以gcc-6 运行真正的gcc。说真的,Apple,这有点奇怪......

以上是关于如何在 OS X 中包含 omp.h?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac OS 的发布版本中包含 Qt 库?

如何在 Mac OS X 上设置 libusb?

django如何在模板中包含javascript

如何在 OS X 上的 Git 中处理文件名中的亚洲字符

如何在 MongoDb 驱动程序的列表中包含特定字段

如何在 Keras 回归模型中包含特征的归一化?