2010-11-19 9 views
7

जब मैं अपने स्रोत कोड लिनक्स में मैं'collect2 को हल करने के लिए कैसे करें: ld 1 निकास स्थिति लौटा'?

qstring.cpp:(.text+0x2c01): undefined reference to `terminate(void)' 
collect2: ld returned 1 exit status 

कैसे इस समस्या को हल करने के लिए की तरह एक त्रुटि मिली निर्माण?

उत्तर

2

आपको यह पता लगाना होगा कि कौन सी ऑब्जेक्ट फ़ाइल या लाइब्रेरी terminate इसमें रहती है और इसे आपके संकलन/लिंक कमांड में शामिल करती है।

यदि यह एक वस्तु या स्रोत फ़ाइल में है, बस इसे अपने gcc (यह मानते हुए कि आप वास्तव में gcc का उपयोग कर, अगर नहीं, विधि शायद समान होगा रहे हैं) सामान्य के अनुसार आदेश के लिए दे। यदि यह लाइब्रेरी में है, तो आपको -L (लाइब्रेरी पथ) और -l (लाइब्रेरी नाम) विकल्पों में देखना चाहिए।

-2

void terminate(void) { raise(9); }

8

terminate आप का उपयोग करना चाहिए सी ++ मानक पुस्तकालय में परिभाषित किया गया है, तो आप को संकलित करने के जीसीसी का उपयोग कर रहे मान लिया जाये कि वाकई में है कि लिंक कर रहे हैं कि सुनिश्चित करें। जाता है, g++ अपने स्रोत कोड को संकलित करने के निष्पादन, नहींgcc निष्पादन:

g++ source.cc -o output 

जब g++ के रूप में मार डाला, लिंकर स्वचालित रूप से सी ++ मानक पुस्तकालय में (libstdC++) आप के लिए जोड़ता है। आप के बजाय सादे gcc के रूप में जीसीसी निष्पादित, या आप सीधे लिंकर ld आह्वान करते हैं, तो आप अपने आप को पुस्तकालय में लिंक करने के लिए -lstdc++ जोड़ने की जरूरत है, उदा .:

gcc source.cc -o output -lstdc++ # Compile directly from source 
ld source1.o source2.o -o output -lstdc++ # Link together object files 
संबंधित मुद्दे