2010-02-19 17 views
5

का उपयोग करके क्लैंग प्रोग्राम के लिए आपको कौन से पुस्तकालयों को लिंक करने की आवश्यकता है, मैंने पाया है (नीचे) कि मुझे ब्लॉक का उपयोग करने वाले कोड को संकलित करते समय -फ्लॉक्स का उपयोग करने की आवश्यकता है।ब्लॉक

लिंकर को _NSConcreteStackBlock को हल करने के लिए मुझे किस लाइब्रेरी को लिंक करने की आवश्यकता है? (उबंटू पर 9.10 AMD64।)

[email protected]:~$ clang ctest.c 

ctest.c:3:25: error: blocks support disabled - compile with -fblocks or pick a 
     deployment target that supports them 
void call_a_block(void (^blockptr)(int)) { 
         ^
ctest.c:11:19: error: blocks support disabled - compile with -fblocks or pick a 
     deployment target that supports them 
    call_a_block(^(int y) { 
       ^
2 diagnostics generated. 
[email protected]ris-desktop:~$ clang ctest.c -fblocks 
/tmp/cc-4sPSeO.o: In function `main': 
ctest.c:(.text+0x79): undefined reference to `_NSConcreteStackBlock' 
collect2: ld returned 1 exit status 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

उत्तर

5

बजना अभी तक एक आसान तरीका प्लेटफार्मों है कि है निर्मित ऑपरेटिंग सिस्टम समर्थन (जैसे, SnowLeopard) नहीं पर ब्लॉक का उपयोग करने प्रदान नहीं करता है। आप libdispatch परियोजना यहाँ पर कुछ अधिक जानकारी प्राप्त कर सकते हैं: http://libdispatch.macosforge.org/ और संकलक-आरटी परियोजना (जो ब्लॉक क्रम प्रदान करता है) पर यहाँ: http://compiler-rt.llvm.org/ लेकिन यह अभी तक अच्छी तरह बजना अंत उपयोगकर्ताओं के लिए पैक नहीं है।

यदि आप थोड़ा सा खोदना चाहते हैं, तो कंपाइलर-आरटी प्रोजेक्ट में ब्लॉक रनटाइम होता है, और आप इसका उपयोग पुस्तकालय बनाने के लिए कर सकते हैं जो एनएससीओनक्रेटस्टैकब्लॉक प्रदान करेगा।

4

एक libBlocksRuntime.a लाइब्रेरी बनाने के लिए http://mackyle.github.com/blocksruntime/ पर निर्देशों का उपयोग करें जिनके साथ आप लिंक कर सकते हैं।

0

साथ Ubuntu पर libBlocksRuntime स्थापित करें:

sudo apt-get install llvm 
sudo apt-get install clang 
sudo apt-get install libblocksruntime-dev 

संकलन करने के लिए, पुस्तकालय और -fblocks में शामिल हैं:

clang ctest.c -fblocks -lBlocksRuntime 

यह भी अन्य ऑपरेटिंग सिस्टम पर उपलब्ध है। फ्रीबीएसडी और मिडनाइटबीएसडी दोनों में क्लैंग और libBlocksRuntime.so

शामिल हैं