web-dev-qa-db-fra.com

Activer la prise en charge OpenMP dans Clang sous Mac OS X (Sierra et Mojave)

J'utilise Mac OS X Sierra et j'ai constaté que clang (LLVM version 8.1.0 (clang-802.0.38)) ne prend pas en charge OpenMP: Lorsque j'exécute clang -fopenmp program_name.c, le message d'erreur suivant s'affiche:

clang: error: unsupported option '-fopenmp'

Il semble que Clang ne supporte pas le drapeau -fopenmp.

Je n'ai pas trouvé de bibliothèque openmp dans l'homebrew. Selon le site Web de LLVM, LLVM prend déjà en charge OpenMP. Mais je n'ai pas trouvé le moyen de l'activer pendant la compilation.

Cela signifie-t-il que le clang par défaut sur Mac ne prend pas en charge OpenMP? Pourriez-vous fournir des suggestions?

(Lorsque je passe à GCC pour compiler le même programme (gcc est installé à l'aide de brew install gcc --without-multilib), la compilation est réussie.)

8
Starry

Essayez d’utiliser Homebrew 's llvm:

brew install llvm

Vous avez alors tous les fichiers binaires llvm dans /usr/local/opt/llvm/bin. Pour compiler le programme OpenMP Hello World , par exemple, tapez

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

Vous devrez peut-être également définir CPPFLAGS avec -I/usr/local/opt/llvm/include.

Un fichier makefile devrait ressembler à ceci:

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)

Mise à jour: Dans macOS 10.14 (Mojave), vous pourriez obtenir une erreur comme 

/usr/local/Cellar/llvm/7.0.1/lib/clang/7.0.1/include/omp.h:118:13: fatal error: 'stdlib.h' file not found

Si cela se produit, les en-têtes macOS SDK sont absents de /usr/include. Ils sont passés dans le SDK lui-même avec Xcode 10 . Installez les en-têtes dans /usr/include avec

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

MacOS Mojave avec CMake

  1. Installer LLVM avec openmp et libomp avec brew

     brew update
     brew install llvm libomp
    
  2. ajouter les répertoires d'inclusion et de liens dans CMakeList.txt

     include_directories("/usr/local/include" "/usr/local/opt/llvm/include")
     link_directories("/usr/local/lib" "/usr/local/opt/llvm/lib")
    
  3. lancez CMake avec les nouveaux compilateurs

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

La version de clang est 7.0.1 au moment de l'écriture

0
Bruno Grieder