2013-06-10 13 views
6

हां, यह पहले पूछा गया है, लेकिन मैं और अन्य जगहों पर आने वाले प्रत्येक उत्तर को जी ++ के बजाय जीसीसी में सी ++ कोड संकलित करने या एक मुद्दा के साथ करना है मानक पुस्तकालयों के साथ कुछ तरह। अब तक, वास्तव में यहां मेरे लिए कुछ भी सही नहीं है।जीसीसी 4.2.1 समस्या को जोड़ना: आर्किटेक्चर के लिए अनिर्धारित प्रतीक x86_64

तो, मैं सी पर एक बुनियादी क्रैश कोर्स के माध्यम से जा रहा हूं, और मानक पुस्तकालयों की बजाय आपके द्वारा बनाई गई फ़ाइलों को जोड़ने के लिए उपयोग किए गए उदाहरण को संकलित करने का प्रयास कर रहा हूं। कोड यह रहा:

math_functions.h

int sum  (int x, int y); 
float average (float x, float y, float z); 

math_functions.c

int sum (int x, int y) 
{ 
    return (x + y); 
} 

float average (float x, float y, float z) 
{ 
    return (x + y + z)/3; 
} 

और अंत में

test3.c

#include <stdio.h> 
#include "math_functions.h" 

main() 
{ 
    int theSum  = sum (8, 12); 
    float theAverage = average (16.9, 7.86, 3.4); 

    printf ("the sum is: %i ", theSum); 
    printf ("and the average is: %f \n", theAverage); 
    printf ("average casted to an int is: %i \n", (int)theAverage); 
} 

ये सब एक ही फ़ोल्डर में हैं। जब मैं टर्मिनल, फ़ोल्डर में सीडी खोलने के लिए और चलाएँ:

gcc test3.c -o test3 

मैं:

Undefined symbols for architecture x86_64: 
    "_average", referenced from: 
    _main in ccmf69Tt.o 
    "_sum", referenced from: 
    _main in ccxms0fF.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

यह तब होता है अगर मैं जीसीसी या जी ++ (जो मैं करने के लिए नहीं होना चाहिए उपयोग करते हैं, इस के बाद से सभी को सी होना चाहिए), और अब मैंने जो कुछ भी संकलित किया है, वह अब

#include <stdio.h> 

शीर्ष पर ठीक काम करता है।

मैं और यह संकलन और test3.c फ़ाइल से

#include "math_functions.h" 

को हटाने के द्वारा ठीक से चलाने के लिए, सामग्री() मुख्य पहले math_functions.h की डाल प्राप्त कर सकते हैं की सामग्री मुख्य() के बाद math_functions.c। और हाँ, यह कॉपी और पेस्ट है, इसलिए यह निश्चित रूप से एक ही कोड है।

तो हाँ, मैं अपना कोड काम करने के लिए प्राप्त कर सकता हूं, लेकिन यह अभ्यास के उद्देश्य को हरा देता है, जिसमें मैं उस कोड को किसी अन्य सी फाइलों में कॉपी करने और इसे चिपकाने के बिना उस कोड का उपयोग करने में सक्षम नहीं होता एक फ़ाइल ...

तो मुझे आश्चर्य है, क्या मैं इसे ठीक कर सकता हूं, इसलिए मैं मानक सी, सी ++ और उद्देश्य-सी पुस्तकालयों को और अधिक शामिल कर सकता हूं?

यह टर्मिनल बॉक्स के माध्यम से होता है, मैन्युअल रूप से जीसीसी कमांड टाइप कर रहा है, और कोडरुनर के माध्यम से, जिसमें मानक आदेश सभी बटन को दूर कर लेते हैं, इसलिए मैं इसे सामान नहीं दे सकता।

मैं 2012 मैक मिनी पर माउंटेन शेर 10.8.4 (12E55) चला रहा हूं, एक्सकोड 4.6.2 से कमांड लाइन टूल्स का उपयोग करके (उन्हें कुछ घंटों पहले स्थापित किया गया है, मैंने वास्तव में मानक नहीं किया है अब तक मिनी का उपयोग)

मेरे पास मैकबुक एयर पर एक ही सॉफ्टवेयर स्थापित है, लेकिन यह जांचने के लिए इसका परीक्षण नहीं किया गया है कि यह अभी तक नीचे चला गया है या नहीं।

कोई बात नहीं? अगर किसी और ने यह किया है और एसओ पर कहीं बाहर काम किया है, तो कृपया मुझे इस पर इंगित करें, मैं एक घंटे के लिए देख रहा हूं लेकिन जैसा कि मैंने पहले कहा था, अब तक जो समाधान मिले हैं, वे तब तक खत्म हो जाएंगे जब वहां सी ++ कोड या मानक पुस्तकालयों के साथ अजीब कुछ है।

उत्तर

5

आपको बस गणित_फंक्शन को संकलित करने की आवश्यकता है। लिंकर शिकायत कर रहा है कि उस मॉड्यूल में परिभाषित परिभाषाएं नहीं हैं।

gcc test3.c math_functions.c -o test3 
+0

आह, जो पुस्तक में होना उपयोगी होता ... हालांकि आगे की ओर देखते हुए, भविष्य के उदाहरणों में यह वाक्यविन्यास होता है। लेखक की साइट में सुधार के लिए एक अनुभाग है, इसलिए मैं जांच करूँगा कि क्या वहां है, और यदि नहीं, तो इसे ईमेल करें। धन्यवाद! – FreelancerJ

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

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