2011-05-06 15 views
6

क्लैंग का नाम बहुत अच्छा विस्तार है block सी को वास्तविक लैम्ब्डा फ़ंक्शन तंत्र लाने के लिए। ब्लॉक की तुलना में, जीसीसी के नेस्टेड फ़ंक्शंस काफी सीमित हैं। हालांकि, एक छोटी सी कार्यक्रम c.c संकलित करने के लिए कोशिश कर रहा है: clang -fblocks c.c साथक्लैंग ब्लॉक?

 
#include <stdio.h> 

int main() { 
    void (^hello)(void) = ^(void) { 
     printf("Hello, block!\n"); 
    }; 
    hello(); 
    return 0; 
} 

, मैं

 
/usr/bin/ld.gold: /tmp/cc-NZ7tqa.o: in function __block_literal_global:c.c(.rodata+0x10): error: undefined reference to '_NSConcreteGlobalBlock' 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

मिला लगता है मैं clang -fblocks c.c -lBlocksRuntime का उपयोग करना चाहिए, लेकिन फिर मैं

 
/usr/bin/ld.gold: error: cannot find -lBlocksRuntime 
(the rest is the same as above) 

किसी भी संकेत मिल गया?

+0

क्या आपने एक्सटेंशन को सही तरीके से इंस्टॉल किया था? 'LibBlocksRuntime.a' और/या' libBlocksRuntime.so' कहां समाप्त हुआ? क्या वह निर्देशिका डिफ़ॉल्ट लिंक लाइब्रेरी खोज पथ में है? क्या आपको खोज पथ में निर्देशिका जोड़ने के लिए '-L' तर्क का उपयोग करने की आवश्यकता है? – QuantumMechanic

+0

@QuantumMechanic मैंने आर्क लिनक्स के रेपो से क्लैंग स्थापित किया। '-फ्लॉक्स' काम करता है इसलिए मेरा मानना ​​है कि आर्क के क्लैंग के निर्माण में विस्तार है। मैंने '/ usr/lib' में' * BlocksRuntime * 'की खोज की और मुझे कोई नहीं मिला। इस पुस्तकालय आमतौर पर कहां स्थित हैं पर कोई संकेत? – xiaq

+0

'सुडो एपीटी-उबंटू पर libblocksruntime-dev' स्थापित करें ठीक है, मैं उबंटू के तहत उत्पादन सी ​​आधारित कोड में ब्लॉक का उपयोग कर रहा हूं। –

उत्तर

17

उबंटू लिनक्स पर के रूप में इस फिक्सिंग, का कोई आसान तरीका है:

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

test.c:

#include <stdio.h> 

int main() { 
    void (^hello)(void) = ^(void) { 
     printf("Hello, block!\n"); 
    }; 
    hello(); 
    return 0; 
} 

संकलन :

clang test.c -fblocks -lBlocksRuntime -o test 
./test 

Hello, block! 

ठीक काम करता है।

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