2012-07-11 12 views
8

ऐसा करने के तरीके पर कुछ ट्यूटोरियल प्रतीत होते हैं, प्रत्येक थोड़ा अलग। मुझे उम्मीद है कि कोई मुझे प्राप्त होने वाले त्रुटि संदेशों को पहचान सकता है और मुझे सही दिशा में इंगित कर सकता है।लिनक्स संकलन त्रुटि पर उद्देश्य-सी

मेरे कोड, एचएम है:

gcc `gnustep-config --objc-flags` -lgnustep-base h.m -o hello 

और मिलती है:

. /usr/share/GNUstep/Makefiles/GNUstep.sh 

मैं के साथ संकलित करने के लिए प्रयास करें:

#import <Foundation/Foundation.h> 
int main (int argc, const char * argv[]) 
{ 
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
NSLog (@"hello world"); 
[pool drain]; 
return 0; 
} 

इससे पहले कि मैं संकलन, मैं कंसोल में दर्ज करें:

 
/tmp/ccgLOnpY.o: In function `main': 
/home/ge/objective-c/h.m:4: undefined reference to `objc_get_class' 
/home/ge/objective-c/h.m:4: undefined reference to `objc_msg_lookup' 
/home/ge/objective-c/h.m:4: undefined reference to `objc_msg_lookup' 
/home/ge/objective-c/h.m:5: undefined reference to `NSLog' 
/home/ge/objective-c/h.m:6: undefined reference to `objc_msg_lookup' 
/tmp/ccgLOnpY.o: In function `__objc_gnu_init': 
/home/ge/objective-c/h.m:8: undefined reference to `__objc_exec_class' 
/tmp/ccgLOnpY.o:(.data.rel+0x0): undefined reference to `__objc_class_name_NSConstantString' 
/tmp/ccgLOnpY.o:(.data.rel+0x8): undefined reference to `__objc_class_name_NSAutoreleasePool' 
collect2: ld returned 1 exit status 

क्या कोई मुझे सही दिशा में इंगित कर सकता है?

टीआईए

+1

तुम क्यों GNUmakefile का उपयोग कर GNUstep-मेकअप के साथ निर्माण नहीं करते हैं? यहां एक http://www.gnustep.it/nicola/Tutorials/WritingMakefiles/index.html –

उत्तर

29

जोड़ने त्रुटि के लिए कारण पुस्तकालयों से जोड़ने के लिए लिंकर के व्यवहार के कारण हुई है। h.m-lgnustep-base के बाद प्रकट होता है लाइब्रेरी को लाइब्रेरी में प्रतीकों के रूप में लिंक नहीं किया गया है, अभी तक इसका सामना नहीं किया गया है। आप या तो पुस्तकालयों से जोड़ने के लिए लिंकर निर्देश दे सकते हैं के रूप में

gcc `gnustep-config --objc-flags` -Wl,--no-as-needed -lgnustep-base h.m -o hello 

या बेहतर अभी तक सिर्फ

gcc h.m `gnustep-config --objc-flags` -lgnustep-base -o hello 
के रूप में संकलन आदेश की शुरुआत करने के लिए स्रोत के लिए कदम भले ही प्रतीकों -Wl,--no-as-needed लिंकर विकल्प का उपयोग नहीं कर रहे हैं का सामना करना पड़ा

मनाया गया लिंकर व्यवहार & लाइब्रेरी के लिंकिंग प्रतीकों को देखने को हतोत्साहित करना है, जिनकी आवश्यकता नहीं हो सकती है, लेकिन संकलन में किसी भी तरह से जुड़े हुए हैं, इस प्रकार दूसरा विकल्प -Wl, --no-as-needed लिंकर विकल्प जोड़ने के बजाय करने का तरीका सुझाया जाएगा।
आशा है कि इससे मदद मिलती है!

+0

धन्यवाद एक औरऑन, कि आखिरी कमांडलाइन इसे नाखून करती है। धन्यवाद! – Geremy

+0

हाँ यह वास्तव में मदद की है, बहुत बहुत धन्यवाद – Leo

9

आपको libobjc से लिंक करने की आवश्यकता होगी। फिक्स बहुत आसान है; बस संकलन के साथ: केवल पुस्तकालय लिंक करने से पहले संकलन में प्रतीकों को देखने के बाद

gcc h.m `gnustep-config --objc-flags` -lobjc -lgnustep-base -o hello 
+0

धन्यवाद एंडी लिखने का तरीका बताया गया है। अपनी कमांडलाइन का उपयोग करके, मुझे अभी भी वही सटीक त्रुटि मिलती है। – Geremy

2

इस विधि अच्छा लगता है:

gcc h.m `gnustep-config --objc-flags` -lgnustep-base -o hello 
5

तुम भी लिंक झंडे निर्दिष्ट करना होगा:

gcc h.m `gnustep-config --objc-flags` `gnustep-config --objc-libs` \ 
-lobjc -lgnustep-base -o hello 
संबंधित मुद्दे