找不到omp.h,OS X Yosemite没有使用最新的gcc版本

时间:2015-02-16 16:45:11

标签: xcode gcc openmp osx-yosemite

我正在尝试在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

4 个答案:

答案 0 :(得分:3)

我通过安装gcc与homebrew:

解决了这个问题
brew install gcc --without-multilib

然后使用

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

答案 1 :(得分:1)

使用自制软件安装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

答案 2 :(得分:0)

clang尚不支持OpenMP。此外,gcc默认链接到Apple的LLVM clang编译器(不是brew安装的GCC)。 而gcc-4.9将链接到GCC。我认为如果指定了-fopenmp,则会自动包含omp.h

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

答案 3 :(得分:0)

您不应该将包含路径添加到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(如配置通常没有选项来指定它应该查找特定包含文件的位置);可能是make,甚至安装Python包的人:CFLAGS=-I... pip install <some-package>

要考虑的其他标志是

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