【问题标题】:omp.h not found, OS X Yosemite not using newest gcc versionomp.h 未找到,OS X Yosemite 未使用最新的 gcc 版本
【发布时间】:2015-04-17 06:01:17
【问题描述】:

我正在尝试在 OS X Yosemite 上构建 GraphChi,但出现以下错误:

fatal error: 'omp.h' file not found

从这个问题 - How to include omp.h in OS X? - 我了解到 Yosemite 使用 Clang 而不是 gcc,它不包括 omp.h。

$ which gcc
/usr/bin/gcc
$ gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.1.0
Thread model: posix

接下来,我通过 Homebrew 安装了 gcc

$ brew info gcc
gcc: stable 4.9.2 (bottled)
http://gcc.gnu.org
/usr/local/Cellar/gcc/4.9.2_1 (1092 files, 177M)
Built from source with: --without-multilib

并更新 $PATH 以包含新 gcc 版本的路径

$ echo $PATH
/usr/local/Cellar/gcc/4.9.2_1:usr/local/bin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

但是,gcc -vwhich gcc 仍然指向旧版本,由于缺少 omp.h 文件,构建 GraphChi 仍然无法正常工作

有人知道我还需要做什么吗?

更新

locate omp.h 返回:

/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/lib/gcc/i686-apple-darwin11/4.2.1/include/omp.h
/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.1.0/4.9.2/include/omp.h
/usr/local/Cellar/gfortran/4.8.2/gfortran/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2/include/omp.h

我的~/.profile

export PATH=/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.1.0/4.9.2/include:/usr/local/Cellar/gcc/4.9.2_1/bin:usr/local/bin:/opt/local/bin:/opt/local/sbin:$PATH

【问题讨论】:

  • 试试locate "omp.h"。如果您还没有配置 locate,我建议您这样做 - 大约需要一分钟左右,但您会找到它的确切位置,因此您可以将其添加到您的路径中。
  • 另外,如果gcc -v 仍然指向旧版本,请编辑您的~/.bashrc 并重新实例化您的终端。
  • 我已经重新实例化了我的终端,这就是为什么路径已经指向正确的目录
  • 导出路径=/usr/local/Cellar/gcc/4.9.2_1/bin:$PATH
  • 我尝试定位 omp.h 并将其位置添加到 $PATH,但它仍然没有帮助。我正在编辑 ~/.profile 中的路径,这是正确的还是在我执行此操作时会有所不同?

标签: xcode gcc openmp osx-yosemite


【解决方案1】:

我通过使用自制软件安装 gcc 解决了这个问题:

brew install gcc --without-multilib

然后用

构建源代码
CC=gcc-5 CXX=g++-5 cmake ..
CC=gcc-5 CXX=g++-5 make -j7

【讨论】:

    【解决方案2】:

    一旦你用自制软件安装了 gcc-4.9,它就会自动出现在你的路径中。要使用 OpenMP,您只需要确保您使用的是新安装的 gcc-4.9,它就能找到 omp.h。

    对于 GraphChi,您必须将 Makefile 的第 3 行更改为 gcc-4.9。从那里,运行 make 应该可以正常工作。他们在自述文件中对此进行了描述,但至少他们描述的版本已经过时https://github.com/GraphChi/graphchi-cpp#problems-compiling-on-mac

    【讨论】:

      【解决方案3】:

      clang 还不支持 OpenMP。 gcc 默认链接到 Apple 的 LLVM clang 编译器(不是从 brew 安装的 GCC)。 相反,gcc-4.9 将链接到 GCC。我想如果 -fopenmp 被指定 omp.h 会自动包含在内。

      可以手动构建支持 OpenMP 的 clang 版本,请参阅 http://clang-omp.github.io

      【讨论】:

        【解决方案4】:

        您不应该将包含路径添加到PATH;相反,将其指定为CFLAGS,包括-I 选项。您可以export CFLAGS 变量,或即时设置它。

        根据你的编译方式,你可以做

        CFLAGS=-I/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.1.0/4.9.2/include/omp.h gcc <whatever>
        

        当然,在这种情况下,您可以直接在gcc 命令上指定它(如-I/usr/local/....),但CFLAGS 变量也适用于configure(因为configure 通常没有选项指定它应该在哪里查找特定的包含文件);可能与make 一起使用,甚至对于那些安装Python 包的人:CFLAGS=-I... pip install &lt;some-package&gt;

        要考虑的其他标志是

        • CXXFLAGS: C++ 特定的预处理器标志
        • LDFLAGS:链接器特定标志(例如,LDFLAGS=-L/some/path/... 用于链接动态库)。
        • CC:指定要使用的 C 编译器。这是避免 OS X 上 clang 的内置 gcc 别名的简单方法。只需使用 CC=/usr/local/bin/gcc-4 make 或类似名称。
        • CXX:指定要使用的 C++ 编译器。

        【讨论】:

          猜你喜欢
          • 2012-06-01
          • 2014-12-13
          • 2015-07-25
          • 2014-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多