私はCの初心者であり、OS Xでコードをコンパイルする際にいくつかの問題があります。
Java Eclipseでもコードをコンパイルするために端末を使用することでも、多くのコードを記述します。しかし、今ではopenMPを学習していて問題があります。
最初にopencodeコードを書くためにXcodeをダウンロードしましたが、<omp.h>
を認識しませんでした。次に、g++
をインストールしました。端末に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
しかし、g++ Mesh.cpp -fopenmp
を使用すると、まだ
Mesh.cpp:4:10: fatal error: 'omp.h' file not found
#include <omp.h>
^
1 error generated.
次に、PTPをEclipseにインストールしようとしましたが、同じ問題が発生しました。 MacBookにはomp.h
がないと思ったので、検索してomp.h
の下のフォルダーにいくつかのgcc-4.9.1/build/
が見つかりました。
ここに問題があります。 Javaに基づいて、ファイルを持っているが使用できない唯一の理由は、クラスパスが間違っているということです。しかし、g ++でこの設定を変更する方法はわかりません。 Xcode、またはEclipseでも、<stdio.h>
などのファイルをインクルードしてすべてのIDEでコンパイルできるので、<omp.h>
でも同じことができないのでしょうか。
もう1つ気づいたのは、gccフォルダーのバージョンは4.9.1
ですが、端末にgcc -v
と入力すると、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
バージョン情報は4.9.1
について何かを言ってはいけませんか? Java -version
が示すものと同じ
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)
読んでくれてありがとう。どんな助けも大歓迎です。
このコマンドはあなたを助けることができます
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
gcc
コマンドとg++
コマンドは、XCodeの場合とは異なります。Appleは、ClangをGCCに見せかけ、移行をスムーズにすることをお勧めします。
Clang OpenMPのサポートは現在作業中です。 WIPコードの大きなリリースを見逃していない場合は、 このバージョンのclang をビルドして使用する必要があります。
もちろん、homebrewやmacportsなどのOpenMPサポートが付属するものを介して、いつでも本物のGCCをインストールできます。
omp.h
ファイルはサブディレクトリに移動されました。 MacPortsで見つけて、このファイルへのリンクを作成することでこのコンパイルの問題を解決しました。
Sudo ln -s /opt/local/include/libomp/omp.h /opt/local/include/omp.h