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

Sta*_*rry 14 macos openmp llvm clang

我使用的是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编译相同的程序(使用gcc安装brew install gcc --without-multilib)时,编译成功.)

Yon*_* Wu 20

其他人给出了一种解决方案(使用 Homebrew llvm)。您还可以将 OpenMP 与 Apple Clang 和 Homebrew libomp ( brew install libomp) 结合使用。只需更换一个命令一样clang -fopenmp test.cclang -Xpreprocessor -fopenmp test.c -lomp

  • 知道为什么 Apple clang 需要 `-Xpreprocessor` 标志吗? (6认同)

Dir*_*irk 10

尝试使用Homebrew的llvm:

brew install llvm
Run Code Online (Sandbox Code Playgroud)

然后,您将拥有所有的llvm二进制文件/usr/local/opt/llvm/bin。例如,要编译OpenMP Hello World程序,请键入

/usr/local/opt/llvm/bin/clang -fopenmp -L/usr/local/opt/llvm/lib omp_hello.c -o hello
Run Code Online (Sandbox Code Playgroud)

您可能还必须设置CPPFLAGSwith -I/usr/local/opt/llvm/include

一个makefile应该如下所示:

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)
Run Code Online (Sandbox Code Playgroud)

更新:在macOS 10.14(Mojave)中,您可能会收到类似的错误

/usr/local/Cellar/llvm/7.0.1/lib/clang/7.0.1/include/omp.h:118:13: fatal error: 'stdlib.h' file not found
Run Code Online (Sandbox Code Playgroud)

如果发生这种情况,macOS SDK标头将丢失/usr/include。他们使用Xcode 10移入了SDK本身。安装标题变为/usr/include

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
Run Code Online (Sandbox Code Playgroud)

  • 您可能还需要`brew install libomp`。 (2认同)
  • 对我来说,编译命令是`/opt/homebrew/opt/llvm/bin/clang -fopenmp -L/opt/homebrew/opt/llvm/lib omp_hello.c` (2认同)

Bru*_*der 9

带有 CMake 的 MacOS Mojave

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

     brew update
     brew install llvm libomp
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加包含目录和链接目录 CMakeList.txt

     include_directories("/usr/local/include" "/usr/local/opt/llvm/include")
     link_directories("/usr/local/lib" "/usr/local/opt/llvm/lib")
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用新的编译器运行 CMake

     cmake -DCMAKE_C_COMPILER="/usr/local/opt/llvm/bin/clang" -DCMAKE_CXX_COMPILER="/usr/local/opt/llvm/bin/clang++" ..
    
    Run Code Online (Sandbox Code Playgroud)

在撰写本文时,clang 版本为 7.0.1

  • “CMakelists.txt”在哪里?我至少有 6 个这样命名的文件。 (2认同)