Как включить 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