我剛剛升級到OS X 10.8「山獅」,我開始後悔做到這一點。OS X 10.8,llvm,OpenMP與CMake
我不再能夠構建使用OpenMP的我的(簡單)並行代碼。
通過看這裏和那裏我瞭解,蘋果是沒有更多的使用「GCC」,而是「LLVM」 - 很可能因爲許可證的相關問題。不幸的是,'llvm'不支持OpenMP。
我不能相信基於OpenMP的不能在OS X上運行更多的程序很多,所以我的問題是:我怎麼能在山獅啓用OpenMP?
閱讀里斯託·利維的出色答卷後,我覺得我缺少的不止我最初以爲。
我沒有使用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。
問候
你可以在10.8上簡單安裝gcc:http://stackoverflow.com/questions/9353444/how-to-use-install-gcc-on-mac-os-x-10-8-xcode-4-4 – 2013-02-28 18:22:44
我發現了這個問題,但它與安裝命令行工具有關。現在我已經看到了與安裝真正的gcc有關的答案。謝謝。 – 2013-02-28 18:32:16
您不需要從macports添加GCC 4.2,因爲它附帶了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功能的最新和最大的功能:) – 2013-03-01 09:49:23