在Mac OS X(sierra& Mojave)中的clang中启用OpenMP支持

时间:2017-04-22 04:58:21

标签: macos clang llvm openmp

我使用的是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)时,编译成功。)

4 个答案:

答案 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

  1. 使用openmp安装LLVM,使用brew安装libomp

    for i in eval(dashboards.replace('false', 'False')):
        print(i['title'])
    
  2. brew update brew install llvm libomp

    中添加包含目录和链接目录
    CMakeList.txt
  3. 使用新的编译器运行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的编译环境

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