我正在尝试在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 -v
和which 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
答案 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 ++编译器。