2013-05-08 14 views
7

के साथ कमांड लाइन पर एकाधिक ऑब्जेक्टिव-सी फ़ाइलों को संकलित करना उम्मीद है कि सरल प्रश्न। मैं क्लैंग के साथ कमांड लाइन से संकलित मूल उद्देश्य-सी सीखने की कोशिश कर रहा हूं। मैं समझता हूं कि एक्सकोड जटिल परियोजनाओं के लिए एक बेहतर समाधान है और मैं जल्द ही इसे आगे बढ़ने की योजना बना रहा हूं, लेकिन मुझे व्यक्तिगत रूप से लगता है कि मैं एक भाषा को बेहतर समझ सकता हूं अगर मैं इसे टर्मिनल में मैन्युअल रूप से संकलित कर सकता हूं, और छोटी परिचयात्मक प्रोग्रामिंग परियोजनाओं के लिए मुझे यह कम लगता है एक नई परियोजना शुरू करने के बजाय टर्मिनल में संकलन करने में परेशानी।क्लैंग

तो सवाल यह है कि: मैं एक उद्देश्य-सी प्रोग्राम कैसे संकलित करता हूं जिसमें एकाधिक फाइलें (कमांड लाइन से) होती हैं? (मैं कोचन की पाठ्यपुस्तक के अध्याय 7 से एक मुख्य.एम और फ्रैक्शन.एम फ़ाइल के साथ अंश कार्यक्रम करने की कोशिश कर रहा हूं, जो #import "Fraction.h" और एक Fraction.h फ़ाइल है जो फाउंडेशन फ्रेमवर्क आयात करता है।) मैं

clang -fobjc-arc main.m -o prog1 

की तरह कुछ का उपयोग एक एकल फाइल को संकलित करने लेकिन अगर मुझे लगता है कि टाइप करें और मैं इस परियोजना में main.m के अलावा अन्य फ़ाइलें शामिल करना चाहते हैं, मैं सहित त्रुटियों मिलती है:

ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

अगर मैं कमांड में अतिरिक्त फ़ाइलों को तर्क के रूप में जोड़ने का प्रयास करें, जैसे कि

clang -fobjc-arc main.m Fraction.h Fraction.m -o prog1 

तो मैं

clang: error: cannot specify -o when generating multiple output files 

मिलता और अगर मैं तो जैसे

clang -fobjc-arc main.m Fraction.h Fraction.m 

तो -ओ तर्क को दूर मैं त्रुटियों सभी नींव ढांचे की चर्चा करते हुए, अंत में "घातक में समाप्त होने का एक विशाल ढेर मिल त्रुटि: उत्सर्जित बहुत सारी त्रुटियां, अब रोक रही हैं "।

मैं यह कैसे कर सकता हूं और इसे काम कर सकता हूं? या क्या मुझे बस इसे चूसना होगा और जैसे ही एक से अधिक फाइल शामिल हों, एक्सकोड का उपयोग करें?

+3

एक त्रुटि यह है कि आप संकलक के लिए तर्क के रूप में फ़ाइल "Fraction.h" को निर्दिष्ट करते हैं। –

+1

आह! धन्यवाद। यही है: इसे सिर्फ एमएम फाइलों की आवश्यकता होती है, न कि। एच। –

उत्तर

6

केवल कार्यान्वयन फ़ाइलें (* मीटर) संकलित किए जाते हैं, नहीं अंतरफलक/फ़ाइलों में शामिल हैं, तो यह काम करना चाहिए:

clang -fobjc-arc main.m Fraction.m -o prog1 

अजीब त्रुटि संदेश "कई आउटपुट फाइलों पैदा" शायद के कारण होता है तथ्य कि क्लैंग हेडर फ़ाइलों को "प्रीकंपिल्ड हेडर फाइल" में भी संकलित कर सकता है।

+0

-fobjc-arc विरासत रनटाइम –

+0

@AbdennourTOUMI का उपयोग करके प्लेटफ़ॉर्म पर समर्थित नहीं है: यह सही है। लेकिन * यह * प्रश्न स्पष्ट रूप से कमांड लाइन पर एआरसी * के साथ उद्देश्य-सी कोड * को संकलित करने के तरीके के बारे में था। अन्यथा बस उस विकल्प को छोड़ दें। –

+0

नहीं, नहीं, मेरा मतलब है कि यह एक त्रुटि है जो प्रदर्शित होती है जब मैं उन फ़ाइलों को संकलित करने का प्रयास कर रहा हूं https://github.com/macmade/host-manager/tree/master/source उबंटू के तहत ... मैं करूंगा आभारी रहें यदि आप मुझे बताते हैं कि LINUX –

2

स्रोत फ़ाइल के रूप में Fraction.h निर्दिष्ट न करें। ऐसा नहीं है, यह एक हेडर फ़ाइल है।

आप लगभग निश्चित रूप से -framework Foundation में फेंकना चाहते हैं। यदि आप किसी अन्य ढांचे का उपयोग करते हैं तो आपको शायद इन्हें भी निर्दिष्ट करने की आवश्यकता होगी।