Как включить omp.h в OS X?

Я новичок в C и имею некоторые проблемы с компиляцией моего кода в OS X.

Я много кодирую Java в Eclipse и использую терминал для компиляции моего кода. Однако теперь я изучаю openMP и испытываю проблемы с ним.

Сначала я загрузил Xcode, чтобы написать openMP-код, но он не распознал <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>?

Еще одна вещь, которую я заметил, это то, что версия папки 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)

Спасибо за чтение. Любая помощь приветствуется.

Ответ 1

GCC 4.9.1 обычно не поставляется с OS X (на самом деле GCC не поставляется с Xcode). Ваш, должно быть, был установлен другим способом, например. Домашняя страница или сама компиляция, как описано здесь. Вероятно, вам не хватает правильно заданной переменной PATH или дополнительно установленный компилятор имеет бинарные файлы с суффиксом, т.е. gcc-4.9 или g++-4.9, а не просто gcc/g++.

Как уже упоминалось @rubenvb, Apple символизирует исполняемые файлы Clang с именами, подобными GCC. Я лично считаю, что плохая практика, так как последние версии Clang, поставляемые с Xcode, реагируют на непризнанные параметры командной строки (например, специфичные для интерфейса GCC) с жесткими ошибками.

Ответ 2

Эта команда может помочь вам

brew установить libomp

brew info libomp
libomp: stable 6.0.1 (bottled)
LLVM 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 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

Ответ 3

Команды gcc и g++ не то, что, по вашему мнению, они имеют с XCode: Apple подумала, что было бы неплохо замаскировать Clang как GCC, чтобы сделать переход более плавным.

Поддержка Clang OpenMP все еще работает. Если бы я не пропустил какой-либо большой выпуск кода WIP, вам нужно будет построить эту версию clang и использовать это.

Вы можете, конечно, всегда устанавливать реальный GCC через такие вещи, как homebrew или macports, которые будут поставляться с поддержкой OpenMP.

Ответ 4

Файл omp.h был перемещен в подкаталог. Я нашел его в MacPorts и решил эту проблему компиляции, создав ссылку на этот файл:

sudo ln -s /opt/local/include/libomp/omp.h /opt/local/include/omp.h