我刚刚升级到OS X 10.8“Mountain Lion”,现在我非常后悔这样做。
我无法再构建使用OpenMP的(简单的)并行代码。
通过寻找资料,我了解到苹果不再使用'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而失败。问候。
make check
进行)都会失败,并显示一个荒谬的消息“/User/myuser/lib/gpm/...”:找不到图像。请注意缺少的“s”。正确的文件夹(带有S)和gmp库在各种库加载路径中。 - Antonio Sesto