it-swarm.com.de

Wie kann ich omp.h in OS X einbinden?

Ich bin neu in C und habe einige Probleme beim Kompilieren meines Codes unter OS X.

Ich codiere viel Java sowohl in Eclipse als auch mit Terminal, um meinen Code zu kompilieren. Jetzt lerne ich openMP und habe Probleme damit.

Zuerst habe ich Xcode heruntergeladen, um OpenMP-Code zu schreiben, aber <omp.h> wurde nicht erkannt. Dann habe ich g++ installiert. Wenn ich g++ -v in das Terminal eingebe, erhalte ich Folgendes:

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

Aber wenn ich g++ Mesh.cpp -fopenmp benutze, bekomme ich immer noch

Mesh.cpp:4:10: fatal error: 'omp.h' file not found
#include <omp.h>
         ^
1 error generated.

Dann habe ich versucht, PTP in meinem Eclipse zu installieren und bekam das gleiche Problem ... Ich dachte, es gäbe keinen omp.h in meinem MacBook, also suchte ich danach und fand unter omp.h mehrere Ordner gcc-4.9.1/build/.

Hier kommt das Problem. Aufgrund der Java-Erfahrung besteht der einzige Grund, warum ich die Datei habe, sie aber nicht verwenden kann, darin, dass der Klassenpfad falsch ist. Ich habe jedoch keine Idee, wie Sie diese Konfiguration in g ++, Xcode oder Eclipse ändern können. Aber da ich Dateien wie <stdio.h> einbinden und mit allen IDEs kompilieren kann, wie kann ich dies nicht mit <omp.h> tun?

Eine andere Sache, die mir aufgefallen ist, ist, dass die Version des gcc-Ordners 4.9.1 ist, aber wenn ich gcc -v in das Terminal eingebe, bekomme ich dasselbe mit der Eingabe von 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

Sollte die Versionsinformation nicht etwas über 4.9.1 aussagen? Genauso wie Java -version zeigt

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)

Danke fürs Lesen. Jede Hilfe wird geschätzt.

15
user3928256

GCC 4.9.1 wird normalerweise nicht mit OS X ausgeliefert (tatsächlich wird kein GCC mit Xcode mehr ausgeliefert). Ihre müssen auf anderem Wege installiert worden sein, z. Homebrew oder Selbstzusammenstellung wie beschrieben hier . Was Ihnen wahrscheinlich fehlt, ist die richtige Variable PATH oder der zusätzlich installierte Compiler hat Binärdateien mit Versionssuffix, d. H. gcc-4.9 oder g++-4.9 anstelle von gcc/g++.

Wie @ rubenvb bereits erwähnt hat, verknüpft Apple die ausführbaren Dateien von Clang mit GCC-ähnlichen Namen. Ich persönlich finde, dass eine schlechte Praxis seit den letzten mit Xcode gelieferten Clang-Versionen auf nicht erkannte Befehlszeilenoptionen (z. B. GCC-Frontend-spezifische) mit harten Fehlern reagiert.

12
Hristo Iliev

Dieser Befehl kann Ihnen helfen

brew installieren 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
15
YIMIN TANG

Die gcc- und g++-Befehle sind nicht das, was Sie mit XCode zu tun glauben: Apple dachte, es wäre eine gute Idee, Clang als GCC zu maskieren, um den Übergang reibungsloser zu gestalten.

Clang OpenMP-Support wird derzeit noch bearbeitet. Wenn ich keine große Version des WIP-Codes vermisst habe, müssen Sie diese Version von clang bauen und diese verwenden.

Sie können natürlich immer ein echtes GCC über Dinge wie Homebrew oder Macports installieren, die OpenMP-Unterstützung bieten.

12
rubenvb

Die omp.h-Datei wurde in ein Unterverzeichnis verschoben. Ich habe es in MacPorts gefunden und dieses Kompilierungsproblem gelöst, indem ein Link zu dieser Datei erstellt wurde:

Sudo ln -s /opt/local/include/libomp/omp.h /opt/local/include/omp.h
2
Freeman