2013-02-28 6 views
7

के साथ ओपनएमपी मैंने अभी ओएस एक्स 10.8 "माउंटेन शेर" में अपग्रेड किया है और मुझे ऐसा करने पर खेद करना शुरू हो गया है।ओएस एक्स 10.8, llvm, सीएमके

अब मैं अपना (सरल) समांतर कोड बनाने में सक्षम नहीं हूं जो OpenMP का उपयोग करता है।

यहां देखकर मुझे पता चला कि ऐप्पल अब 'जीसीसी' लेकिन 'llvm' का उपयोग नहीं कर रहा है - लाइसेंस-संबंधी मुद्दों के कारण काफी संभावना है। दुर्भाग्यवश 'llvm' (ओपनएमपी) का समर्थन नहीं करता है।

मुझे विश्वास नहीं है कि ओपनएमपी के आधार पर कई कार्यक्रम ओएस एक्स पर नहीं चलेंगे, इसलिए मेरा सवाल है: मैं माउंटेन शेर में ओपनएमपी कैसे सक्षम कर सकता हूं?


हिस्टो इलिव के उत्कृष्ट उत्तर पढ़ने के बाद, मुझे लगता है कि मैंने शुरू में सोचा था उससे ज्यादा मुझे याद आ रही है।

मैं एक्सकोड का उपयोग नहीं कर रहा हूं। इमारत सीएमके पर आधारित है और/gcc बनाओ। कल मैंने मैकपोर्ट्स के माध्यम से जीसीसी 4.2 स्थापित किया, लेकिन - आज के रूप में - मेरा कोड अभी भी स्रोत रूप में है क्योंकि - कुछ अजीब कारणों से - मैं संकलन को जीसीसी (ओपनएमपी से संबंधित त्रुटियों) में स्विच करने में सक्षम नहीं हूं।

समस्या अब यह है कि सीएमके llvm कंपाइलर का उपयोग करता रहता है।

set(CMAKE_C_COMPILER "/opt/local/bin/gcc-apple-4.2") 
set(CMAKE_CXX_COMPILER "/opt/local/bin/gcc-apple-4.2") 

और मैं भी दो वातावरण चर कहा:: जड़ CMakeLists.txt में मैं निम्नांकित दो पंक्तियों को जोड़ा

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 के कारण विफल रहता है।

सादर

+1

आप बस 10.8 पर जीसीसी स्थापित कर सकते हैं: http://stackoverflow.com/questions/9353444/how-to-use-install-gcc-on-mac-os-x-10-8-xcode-4-4 –

+1

मुझे वह प्रश्न मिला, लेकिन यह कमांड लाइन टूल्स की स्थापना से संबंधित था। अब मैंने असली जीसीसी स्थापित करने से संबंधित जवाब देखा है। धन्यवाद। –

+0

आपको मैकपोर्ट से जीसीसी 4.2 जोड़ना नहीं था क्योंकि यह एक्सकोड कमांड लाइन टूल्स के साथ आता है। आपको केवल [उन्हें जीयूआई से अतिरिक्त स्थापित करना होगा] (http://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_3.html)। फिर भी, जैसा कि आप एक्सकोड का उपयोग नहीं करते हैं, मैं अत्यधिक अनुशंसा करता हूं कि आप अपना स्वयं का जीसीसी 4.7.2 बनाएं - ओपनएमपी 3.1 फीचर्स के लिए नवीनतम और सबसे बड़ा समर्थन :) –

उत्तर

11

LLVM एक संकलक रूपरेखा है कि एप्पल ओएस एक्स में बड़े पैमाने पर उपयोग करता है (सबसे विशेष रूप से ओपन कार्यान्वयन में), नहीं एक संकलक ही है। एक्सकोड में दो एलएलवीएम फ्रंटेंड्स उपलब्ध हैं - पुराना जीसीसी-आधारित एक llvm-gcc (जो ओपनएमपी 2.5 का समर्थन करता है) और नया clang (जो ओपनएमपी का समर्थन नहीं करता है)। clang में व्यापक स्थैतिक कोड विश्लेषण क्षमताओं और विशेष रूप से सी ++ कोड के साथ बहुत अच्छी त्रुटि रिपोर्टिंग है। अधिकांशतः यही कारण है कि ऐप्पल इसमें निवेश कर रहा है और जीसीसी से मुक्त हो रहा है (दूसरी तरफ फ्रीबीएसडी प्रोजेक्ट, जीसीसी को पूरी तरह लाइसेंस-संबंधी कारणों से क्लैंग के साथ बदलने की मांग कर रहा है)। एक चल रहे प्रोजेक्ट clomp (इंटेल के क्लस्टर ओपनएमपी के साथ गलत नहीं होना चाहिए) जो clang का ओपनएमपी-जागरूक संस्करण बनाना चाहता है, लेकिन यह परिपक्व से बहुत दूर है।

यदि आपको स्पष्ट कार्यों की तरह नए ओपनएमपी संरचनाओं की आवश्यकता नहीं है और कुछ bugs के साथ रह सकते हैं, तो भी आप पुराने जीसीसी फ्रंटएंड का उपयोग कर सकते हैं। बस LLVM जीसीसी 4.2 करने के लिए परियोजना सेटिंग्स में संकलक सुइट स्विच:

Compiler suite chooser

यह एक वास्तव में प्राचीन जीसीसी 4.2.1 पर आधारित है और अब विकसित किया जा रहा है। क्या आपको जीसीसी के नए संस्करण की आवश्यकता होनी चाहिए, बस build one। दुर्भाग्य से मैं आपको एक्सकोड में इसे एकीकृत करने के तरीके के बारे में जानकारी प्रदान नहीं कर सकता। यह मेरे लिए जीसीसी 4.7.1 और ओएस एक्स 10.8.2 के साथ कमांड लाइन पर काम करता है (और मैं एक्सकोड का अधिक उपयोग नहीं करता)।

4

उत्कृष्ट हिस्टो के उत्तर में कुछ शब्द जोड़ना: आप मैकपॉर्ट्स के माध्यम से जीसीसी स्थापित कर सकते हैं। हाथों से सबकुछ संकलित करने से यह बहुत आसान है (और जीसीसी को स्क्रैच से संकलित करना निर्भरता के कारण वास्तव में गैर-मामूली कार्य हो सकता है)।

तो, मैकपॉर्ट्स इंस्टॉल करें, "सुडो पोर्ट स्थापित gcc47" करें, कुछ घंटों तक प्रतीक्षा करें और आप gcc-mp-4.7 के साथ समाप्त हो जाएंगे जो आपके ओपनएमपी कोड को संकलित करने में सक्षम है।

+3

यह होमब्री में भी उपलब्ध है। ओपनएमपी समर्थन के लिए – FreeNickname

+6

'$ brew इंस्टॉल gcc --without-multilib' –

संबंधित मुद्दे