2013-02-17 18 views
5

तो, मैं Ubuntu हो गया और clang3.0 स्थापित किया है और एक सरल program.m:बजना संकलन त्रुटि (अपरिभाषित संदर्भ objc_autoreleasepoolpush करने के लिए)

#include <Foundation/Foundation.h> 
int main() 
{ 
     @autoreleasepool{ 
      NSLog(@"Hi"); 
     } 

     return 0; 
} 

और मैं इस तरह यह संकलन करने का प्रयास करें:

clang first.m -I /usr/include/GNUstep/ -lgnustep-base -fconstant-string-class=NSConstantString -objc 

और मैं

undefined reference to objc_autoreleasePoolPush 
undefined reference to objc_autoreleasePoolPop 

मिलता तो मैं एक छोटे से googled और objc2 स्थापित करने और कोशिश की है:

clang first.m -I /usr/include/GNUstep/ -lgnustep-base -fconstant-string-class=NSConstantString -objc2 

लेकिन कुछ भी नहीं बदलेगा। शायद किसी को भी एक ही समस्या हल हो गई थी?

उत्तर

0

मेरी Ubuntu सिस्टम पर स्थापित libobjc2 के साथ, अपने first.m फ़ाइलों की एक प्रतिलिपि इस लाइन के साथ मेरे लिए संकलित:

clang first.m `gnustep-config --objc-flags` `gnustep-config --objc-libs` \ 
-I /usr/include/GNUstep/ -lgnustep-base 

लेकिन शायद यह अपने कमांड लाइन के अंत में लिखते समय एक लेखन है?

आपके पहले उदाहरण के अंत में -objc और दूसरे के अंत में -objc2 क्रमशः नाम बीजेसी और बीजेसी 2 के साथ निष्पादन योग्य बनाने के लिए क्लैंग कंपाइलर को निर्देश दे रहा है। क्या आपका मतलब -लोब? मुझे लगता है कि ओब्जे लाइब्रेरी में लिंक करना उद्देश्य-सी रनटाइम लाइब्रेरी प्राप्त करने के लिए महत्वपूर्ण है। Libobjc2 प्रोजेक्ट के साथ भी, लाइब्रेरी का उत्पादन अभी भी libobjc.so.x.y नाम दिया गया है। यदि आपके आदेश में -lobjc शामिल नहीं है, तो मुझे नहीं लगता कि यह कभी भी सही तरीके से कैसे लिंक कर सकता है। मैं गलत हो सकता था लेकिन यह मेरे बिना मेरे लिए काम नहीं करता है।

+0

धन्यवाद वीक पॉइंटर) क्लैंग first.m 'gnustep-config --objc-flags'' gnustep-config --objc-libs' -I/usr/include/GNUstep/-lgnustep-base -I/home/nazar/libobjc2/ इस ठीक काम करता है, लेकिन मैं चेतावनी मिलती है: तर्क अप्रयुक्त संकलन के दौरान: 'कमरा साझा-libgcc' धन्यवाद फिर से) – Nils

+0

और अब मैं चेतावनी मिलती है: libobjc.so.3,/usr/lib/libgnustep की जरूरत -base.so, libobjc.so.4 के साथ संघर्ष कर सकते हैं – Nils

0

मुझे यकीन नहीं है कि यह जीएनयूस्टेप पर लागू होता है, लेकिन ओएस एक्स पर आपको -fobjc-arc कंपाइलर ध्वज जोड़ना होगा यदि आप एआरसी के साथ संकलित करना चाहते हैं।

+0

त्रुटि: -फोबजेक-आर्क को नाजुक अबी – Nils

+1

के साथ समर्थित नहीं है http://wiki.gnustep.org/index.php/ObjC2_FAQ के अनुसार, आपको '-fobjc-nonfragile-abi' विकल्प' जोड़ना होगा। –

+0

मैं कोशिश करूंगा http://wiki.gnustep.org/index.php/GNUstep_under_Ubuntu_Linux – Nils

0

इसे जीएनयूमेकफाइल के साथ बनाने का प्रयास करें?

यहां एक लिखना है।

http://www.gnustep.it/nicola/Tutorials/WritingMakefiles/node2.html

एक संकलित और

बजना first.m -c -MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY = 1 -DGNU_GUI_LIBRARY = 1 -DGNU_RUNTIME = 1 -DGNUSTEP_BASE_LIBRARY = 1 -fobjc की तरह जोड़ा जा सकता है -रंटिम = gnustep-1.7 -fno-hard-aliasing -fexceptions -fobjc-upss -D_NATIVE_OBJC_EXCEPTIONS -fobjc-nonfragile-abi -D_NONFRAGILE_ABI -pthread -fPIC -DDEBUG -fno-omit-frame-pointer -Wall -DGSWARN -DGSDIAGNOSE -Wno -import -g -fgnu-runtime -fconstant-string-class = NSConstantString-I। -आई/usr/local/include -o obj/first.obj/first.mo

क्लैंग-गतिशील -पिथ्रेड -श्रेड-libgcc -fexceptions -fobjc-nonfragile-abi -fgnu-runtime -o obj/first। /obj/first.obj/first.mo -L/usr/local/lib -lgnustep-base -lobjc -lm

जीएनयूस्टेप पैकेज को कॉन्फ़िगर करने के तरीके के आधार पर।

+0

हू? ओपी के लिंकर मुद्दे के साथ मेकफ़ाइल को क्या करना है? – trojanfoe

+0

यह सिर्फ एक मेकफ़ाइल नहीं है, यह एक मेकफ़ाइल है जिसमें कॉन्फ़िगर किए गए विकल्प शामिल हैं।जीएनयूस्टेप पैकेज आमतौर पर उन विकल्पों को प्रदान करता है जिनका उपयोग जीएनयूस्टेप पुस्तकालयों को बनाने के लिए किया गया था, जिसमें लिंकर विकल्प शामिल थे। –

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