我刚刚升级到 OS X 10.8 “Mountain Lion”,我开始后悔这样做了。
我不再能够构建使用 OpenMP 的(简单)并行代码。
通过到处查看,我了解到 Apple 不再使用“gcc”而是“llvm”——很可能是由于与许可证相关的问题。不幸的是,'llvm' 不(还?)支持 OpenMP。
我不敢相信许多基于 OpenMP 的程序将不再在 OS X 上运行,所以我的问题是:如何在 Mountain Lion 中启用 OpenMP?
在阅读了 Hristo Iliev 的出色回答后,我想我错过的比我最初想象的要多。
我没有使用 XCode。该建筑基于 CMake 和 make/gcc。昨天我通过 macports 安装了 gcc 4.2,但是 - 截至今天 - 我的代码仍然是源代码形式,因为 - 由于一些奇怪的原因 - 我无法将编译切换到 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 而失败。
问候