2013-02-15 97 views
2

當前正在使用最新版本的XCode,即4.6,並且遇到了啓用OpenMP的麻煩。在構建設置中,我沒有看到「Enable OpenMP Support」這樣的選項。我正在使用帶有C++ 11支持的Apple LLVM Compiler 4.2libc++ LLVM C++標準庫。任何幫助,將不勝感激..在XCode 4.6中啓用OpenMP支持

+1

我不確定自從本問答以來情況有何變化:http://stackoverflow.com/questions/13720234/xcode-4-5-and-openmp-with-clang-apple-llvm-uses-only -one-core – 2013-02-15 15:46:41

+0

這意味着如果情況沒有改變,我將無法使用OpenMP? – 2013-02-15 16:21:16

+0

沒錯,不是Apple提供的LLVM編譯器。其他編譯器可用,其中一些編譯器支持Mac OS X上的OpenMP。 – 2013-02-15 16:29:22

回答

4

在生成設置,我改變 「編譯器爲C/C++/Objective-C的」 到 「LLVM GCC 4.2」

然後,根據 「LLVM GCC 4.2 - 語言」您可以選擇啓用OpenMP。我還沒有測試編譯真正的代碼,但至少「#include」現在可以工作。

+0

更新:我收到了這裏討論的SIGABRT錯誤:[link](https://discussions.apple.com/thread/3786045)。他們聲稱這是LLVM GCC 4.2的錯誤,但也可能是我以某種方式破壞了內存。 – 2013-03-17 00:39:08

+1

我嘗試使用g ++ - mp-4.7從命令行構建我的代碼,並且不再有SIGABRT問題。雖然我仍然不能100%確定我的代碼是正確的,但似乎增加了OpenMP不能在XCode中工作的想法,至少現在是這樣。 LLVM GCC 4.2會讓你編譯它,但你會經常崩潰。 – 2013-03-18 01:18:04

1

早些時候用戶已經說了一切正確,但他錯過了一件事,這就是他不能包含「omp.h」 的原因,您必須在「庫搜索路徑」選項中提及該庫的路徑。否則,編譯器無法自動找到它。因此,步驟如下:

  1. 在生成設置,我改變 「編譯器爲C/C++/Objective-C的」 到 「LLVM GCC 4.2」
  2. 然後,在 「LLVM GCC 4.2 - 語言」您可以選擇啓用OpenMP。
  3. 在「標題搜索路徑」中,添加「omp.h」文件的位置。
  4. 現在你做

複製下面的代碼,並享受:

int main(int argc, char **argv) { 
    omp_set_num_threads(8); 
    int iter; 
    int NCOUNT = 100000000; 
#pragma omp parallel for 
    for(iter = 0; iter < NCOUNT; iter++) 
    { 
     printf("OMP: Hello World, %d times\n", iter); 
    } 
    return 0; 
} 

注意:對於我的MAC電腦,我找到了 「omp.h」 文件中的「在/ usr/llvm- gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/include「,可能會對你的情況有所不同,但我確定它必須位於」/ usr/..「 使用「查找」操作來查找特定文件。請注意,「/ usr」是MAC系統中的隱藏文件夾,因此您必須激活系統才能顯示隱藏的文件和文件夾。