2009-02-15 16 views
17

में शुरू मैं निम्नलिखित कोड है:संकलित करें: अपरिभाषित प्रतीकों: "_main", से संदर्भित: crt1.10.5.o

Undefined symbols: 
    "_main", referenced from: 
     start in crt1.10.5.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 
:

#include <iostream> 

using namespace std; 

class testing{ 
    int test() const; 
    int test1(const testing& test2); 
}; 

int testing::test() const{ 
    return 1; 
} 

int testing::test1(const testing& test2){ 
    test2.test(); 
    return 1; 
} 
संकलन के बाद

, यह मेरे निम्नलिखित त्रुटि देता है

यह मुख्य के बारे में शिकायत क्यों कर रहा है? क्या मैं किसी अन्य फाइल में मुख्य घोषित नहीं कर सकता हूं और इसे शामिल कर सकता हूं?

बहुत बहुत धन्यवाद!

उत्तर

22

आप यह पहले से ही जोड़ने की कोशिश की है। तब लिंकर मुख्य कार्य को ढूंढने में असमर्थ है जिसकी आवश्यकता है। खैर, यह इस तरह से कार्य करें:

g++ -c file.cpp 
g++ -c hasmain.cpp 

कि दो फ़ाइलों पैदा करेगा file.o और hasmain.o, दोनों ही अब तक संकलित। अब आप उन्हें जी के साथ ++ एक साथ लिंक कर सकते हैं:

g++ -omy_program hasmain.o file.o 

यह स्वचालित रूप से यह पता लगाने जाएगा कि उन फ़ाइलों को पहले से ही संकलित कर रहे हैं, और एक फ़ाइल "my_program" जो अपने निष्पादन योग्य है बनाने के लिए उन पर लिंकर आह्वान।

1

यदि आप किसी अन्य फ़ाइल में मुख्य फ़ंक्शन घोषित करते हैं, तो आपको दो फ़ाइलों को अलग से संकलित करना होगा, और फिर उन्हें 1 निष्पादन योग्य में लिंक करना होगा।

जब तक आप मुख्य फ़ंक्शन के साथ फ़ाइल से फ़ाइल की पूरी सामग्री शामिल नहीं करते हैं, तो यह भी थोड़ा सा अजीब काम करेगा। लेकिन, यदि आप ऐसा करते हैं तो आपको यह सुनिश्चित करना होगा कि आप उस फ़ाइल को संकलित करें जिसमें मुख्य() फ़ंक्शन है।

g++ file.cpp 

यह केवल यह संकलन नहीं होगा, लेकिन पहले से ही निष्पादन योग्य बनाने का प्रयास करें:

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