web-dev-qa-db-ja.com

Mac OS XのclangでOpenMPサポートを有効にする(sierraおよびMojave)

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のWebサイトによると、LLVMはすでにOpenMPをサポートしています。しかし、コンパイル中にそれを有効にする方法を見つけることができませんでした。

これは、MacのデフォルトのclangがOpenMPをサポートしていないことを意味しますか?何か提案はありますか?

(GCCに切り替えて同じプログラムをコンパイルすると(gccはbrew install gcc --without-multilibを使用してインストールされます)、コンパイルは成功します。)

21
Starry

Homebrew のllvmを使用してみてください:

brew install llvm

次に、/usr/local/opt/llvm/binにすべてのllvmバイナリが含まれます。 OpenMP Hello Worldプログラム をコンパイルするには、たとえば、次のように入力します。

/usr/local/opt/llvm/bin/clang -fopenmp -L/usr/local/opt/llvm/lib omp_hello.c -o hello

CPPFLAGS-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)

更新: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

この場合、macOS SDKヘッダーが/usr/includeにありません。それらは Xcode 1 でSDK自体に移動しました。ヘッダーを/usr/includeにインストールします

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
7
Dirk

CMakeを搭載したMacOS Mojave

  1. OpenmpでLLVMを、brewでlibompをインストールします

     brew update
     brew install llvm libomp
    
  2. インクルードディレクトリとリンクディレクトリをCMakeList.txtに追加

     include_directories("/usr/local/include" "/usr/local/opt/llvm/include")
     link_directories("/usr/local/lib" "/usr/local/opt/llvm/lib")
    
  3. 新しいコンパイラーでCMakeを実行する

     cmake -DCMAKE_C_COMPILER="/usr/local/opt/llvm/bin/clang" -DCMAKE_CXX_COMPILER="/usr/local/opt/llvm/bin/clang++" ..
    

執筆時点でのclangバージョンは7.0.1です。

3
Bruno Grieder