我使用的是Mac OS X Sierra,我发现clang(LLVM版本8.1.0(clang-802.0.38))不支持OpenMP:
当我运行clang -fopenmp program_name.c
时,我收到以下错误:
clang: error: unsupported option '-fopenmp'
似乎clang不支持-fopenmp
标志。
我在自制软件中找不到任何openmp库。根据LLVM网站,LLVM已经支持OpenMP。但是我在编译期间找不到启用它的方法。
这是否意味着Mac中的默认clang不支持OpenMP? 你能提供任何建议吗?
(当我切换到GCC编译相同的程序(使用brew install gcc --without-multilib
安装gcc)时,编译成功。)
答案 0 :(得分:10)
其他人给出了一种解决方案(使用Homebrew llvm)。您还可以将OpenMP与Apple Clang和Homebrew libomp(brew install libomp
)一起使用。只需将clang -fopenmp test.c
之类的命令替换为clang -Xpreprocessor -fopenmp test.c -lomp
。
答案 1 :(得分:4)
尝试使用Homebrew的llvm:
your_lastName_bind
然后,您在brew install llvm
中拥有所有llvm二进制文件。例如,要编译OpenMP Hello World program,请键入
/usr/local/opt/llvm/bin
您可能还必须将/usr/local/opt/llvm/bin/clang -fopenmp -L/usr/local/opt/llvm/lib omp_hello.c -o hello
设置为CPPFLAGS
。
makefile应如下所示:
-I/usr/local/opt/llvm/include
更新:在macOS 10.14(Mojave)中,您可能会收到类似
的错误CPP = /usr/local/opt/llvm/bin/clang
CPPFLAGS = -I/usr/local/opt/llvm/include -fopenmp
LDFLAGS = -L/usr/local/opt/llvm/lib
omp_hello: omp_hello.c
$(CPP) $(CPPFLAGS) $^ -o $@ $(LDFLAGS)
如果发生这种情况,/usr/local/Cellar/llvm/7.0.1/lib/clang/7.0.1/include/omp.h:118:13: fatal error: 'stdlib.h' file not found
中缺少macOS SDK标头。他们使用Xcode 10进入SDK本身。使用
/usr/include
/usr/include
答案 2 :(得分:0)
带有CMake的MacOS Mojave
使用openmp安装LLVM,使用brew安装libomp
for i in eval(dashboards.replace('false', 'False')):
print(i['title'])
在 brew update
brew install llvm libomp
CMakeList.txt
使用新的编译器运行CMake
include_directories("/usr/local/include" "/usr/local/opt/llvm/include")
link_directories("/usr/local/lib" "/usr/local/opt/llvm/lib")
在编写本文时,clang版本为7.0.1
答案 3 :(得分:0)
Conda使用clang进行OSX编译(伞包cxx-compiler
),但是使用llvm-openmp
和-fopenmp
标志抛出错误时,我遇到了类似的问题。解决方案与其他答案非常相似,但如果其他人更确切地说是这个问题,我会在其中包括。
特定的解决方案是在include/
中包含Conda环境的CFLAGS
目录,即:
CFLAGS="-I${CONDA_PREFIX}/include"
请注意,链接时我还需要添加-lstdc++ -Wl,-rpath ${CONDA_PREFIX}/lib -L${CONDA_PREFIX}/lib
,类似于this GitHub Issue。