Je suis nouveau en C et j'ai du mal à compiler mon code sous OS X.
Je code beaucoup Java à la fois dans Eclipse et utilise un terminal pour compiler mon code. Cependant, maintenant, j'apprends openMP et j'ai des problèmes avec cela.
J'ai d'abord téléchargé Xcode pour écrire du code openMP mais il ne reconnaissait pas <omp.h>
. Ensuite, j'ai installé g++
. Quand je tape g++ -v
dans le terminal, je reçois ceci:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-Apple-darwin13.3.0
Thread model: posix
Mais quand j'utilise g++ Mesh.cpp -fopenmp
, je reçois toujours
Mesh.cpp:4:10: fatal error: 'omp.h' file not found
#include <omp.h>
^
1 error generated.
Ensuite, j'ai essayé d'installer PTP dans mon Eclipse et j'ai eu le même problème. Comme je ne pensais pas qu'il y avait omp.h
dans mon MacBook, je l'ai cherché et j'ai trouvé plusieurs omp.h
dans les dossiers sous gcc-4.9.1/build/
.
Voici le problème. D'après l'expérience de Java, la seule raison pour laquelle j'ai le fichier mais ne peux pas l'utiliser est que le chemin d'accès aux classes est incorrect. Cependant, je ne sais pas comment changer cette configuration dans g ++, ni dans Xcode, ni dans Eclipse. Mais puisque je peux inclure des fichiers comme <stdio.h>
et le compiler avec tous les IDE, comment ne puis-je pas faire la même chose avec <omp.h>
?
Une autre chose que j'ai remarquée est que la version du dossier gcc est 4.9.1
, mais lorsque je tape gcc -v
dans le terminal, je reçois le même résultat en tapant g++ -v
.
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-Apple-darwin13.3.0
Thread model: posix
L'information de version ne devrait-elle pas dire quelque chose à propos de 4.9.1
? Tout comme ce que Java -version
montre
Java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)
Merci d'avoir lu. Toute aide est appréciée.
GCC 4.9.1 n’est normalement pas livré avec OS X (en fait, aucun GCC n’a plus de Xcode). Le vôtre doit avoir été installé par un autre moyen, par exemple Homebrew ou auto compilation comme décrit ici . Ce qui vous manque probablement est défini correctement la variable PATH
ou le compilateur installé en plus possède des fichiers binaires avec un suffixe de version, à savoir gcc-4.9
ou g++-4.9
au lieu de simplement gcc
/g++
.
Comme @rubenvb l'a déjà mentionné, Apple crée un lien symbolique vers les exécutables Clang avec des noms de type GCC. Personnellement, je trouve qu’une mauvaise pratique, depuis les versions récentes de Clang livrées avec Xcode, de réagir aux options de ligne de commande non reconnues (par exemple, celles spécifiques à l’interface GCC) avec des erreurs commises.
Cette commande peut vous aider
brasser installer libomp
brew info libomp
libomp: stable 6.0.1 (bottled)
LLVM's OpenMP runtime library
https://openmp.llvm.org/
/usr/local/Cellar/libomp/6.0.1 (12 files, 1.2MB) *
Poured from bottle on 2018-11-20 at 16:12:22
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/libomp.rb
==> Dependencies
Build: cmake ✘
==> Requirements
Required: macOS >= 10.10 ✔
==> Caveats
On Apple Clang, you need to add several options to use OpenMP's front end
instead of the standard driver option. This usually looks like
-Xpreprocessor -fopenmp -lomp
You might need to make sure the lib and include directories are discoverable
if /usr/local is not searched:
-L/usr/local/opt/libomp/lib -I/usr/local/opt/libomp/include
For CMake, the following flags will cause the OpenMP::OpenMP_CXX target to
be set up correctly:
-DOpenMP_CXX_FLAGS="-Xpreprocessor -fopenmp -I/usr/local/opt/libomp/include" -DOpenMP_CXX_LIB_NAMES="omp" -DOpenMP_omp_LIBRARY=/usr/local/opt/libomp/lib/libomp.dylib
Les commandes gcc
et g++
ne sont pas ce que vous croyez être avec XCode: Apple a pensé que ce serait une bonne idée de faire passer Clang en GCC pour faciliter la transition.
La prise en charge de Clang OpenMP est toujours en cours. Si je n'ai manqué aucune grosse version du code WIP, vous devrez construire cette version de clang et l'utiliser.
Vous pouvez bien sûr toujours installer un vrai GCC via des outils tels que homebrew ou macports, fournis avec le support OpenMP.
Le fichier omp.h
a été déplacé dans un sous-répertoire. Je l'ai trouvé dans MacPorts et j'ai résolu ce problème de compilation en créant un lien vers ce fichier:
Sudo ln -s /opt/local/include/libomp/omp.h /opt/local/include/omp.h