Я только что обновился до OS X 10.8 «Mountain Lion», и я начинаю сожалеть о том, что сделал это.OS X 10.8, llvm, OpenMP с CMake
Я больше не могу построить мой (простой) параллельный код, который использует OpenMP.
При взгляде сюда и там я понял, что Apple больше не использует «gcc», а «llvm» - вполне вероятно, из-за проблем с лицензией. К сожалению, llvm не поддерживает (пока?) Поддержку OpenMP.
Я не могу поверить, что многие программы на основе OpenMP больше не будут запускаться в OS X, поэтому мой вопрос: как включить OpenMP в Mountain Lion?
После прочтения отличного ответа Христо Ильева, я думаю, что пропал больше, чем я изначально думал.
Я не использую XCode. Здание основано на CMake и make/gcc. Вчера я установил gcc 4.2 через macports, но - на сегодняшний день - мой код все еще находится в исходной форме, потому что по некоторым странным причинам я не могу переключить компиляцию на gcc (те же ошибки, связанные с OpenMP).
Проблема в том, что CMake продолжает использовать компилятор llvm. В корневой CMakeLists.txt я добавил следующие две строки:
set(CMAKE_C_COMPILER "/opt/local/bin/gcc-apple-4.2")
set(CMAKE_CXX_COMPILER "/opt/local/bin/gcc-apple-4.2")
и я также добавил две среды переменные:
export CXX=/opt/local/bin/gcc-apple-4.2
export CC=/opt/local/bin/gcc-apple-4.2
Когда CMake пытается найти OpenMP (FIND_PACKAGE (OpenMP)) Я получаю следующий вывод:
-- The compiler is /opt/local/bin/gcc-apple-4.2
-- Try OpenMP C flag = [-fopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
[...]
CMake Error at /opt/local/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (message):
Could NOT find OpenMP (missing: OpenMP_C_FLAGS OpenMP_CXX_FLAGS)
Call Stack (most recent call first):
/opt/local/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:291 (_FPHSA_FAILURE_MESSAGE)
/opt/local/share/cmake-2.8/Modules/FindOpenMP.cmake:159 (find_package_handle_standard_args)
demo/CMakeLists.txt:8 (FIND_PACKAGE)
Я попытался запустить /opt/local/bin/gcc-apple-4.2
вручную, и это не удается из-за отсутствующего libgomp.
С уважением
Вы можете просто установить gcc на 10.8: http://stackoverflow.com/questions/9353444/how-to-use-install-gcc-on-mac-os-x-10-8-xcode-4-4 –
Я нашел этот вопрос, но он был связан с установкой инструментов командной строки. Теперь я видел ответ, связанный с установкой реального gcc. Спасибо. –
Вам не нужно было добавлять GCC 4.2 из macports, поскольку он поставляется с инструментами командной строки XCode. Вам нужно только [установить их дополнительно из GUI] (http://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_3.html). Тем не менее, поскольку вы не используете XCode, я бы настоятельно рекомендовал вам создать собственный GCC 4.7.2 - самый последний и самый лучший с поддержкой функций OpenMP 3.1 :) –