2010-09-17 11 views
16

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

/usr/bin/qcc -V4.2.4,gcc_ntoarmle_acpp-ne -lang-c++ -O2 -g -g -o Application/UnitTests/Tests/symbols/UnitTestExe -Wl,--start-group Application/UnitTests/Tests/../.objs/main.o Application/UnitTests/lib/libcpputest.a -Wl,--end-group -lm 

मैं निम्नलिखित जैसे कई त्रुटियाँ हो रही है::

Application/UnitTests/lib/libcpputest.a(CommandLineTestRunner.o): In function `CommandLineTestRunner::parseArguments(TestPlugin*)': 
    Application/UnitTests/cpputest/src/CppUTest/.objs/../CommandLineTestRunner.cpp:114: undefined reference to `operator new(unsigned int, char const*, int)' 

मैं यह है कि क्या पैदा को समझ नहीं सकता

यह मेरा आदेश पंक्ति है। क्या मैं ऑपरेटर को सी ++ के साथ मुफ्त में नहीं मिला?

+0

इस जानकारी के आधार पर मदद करना वाकई मुश्किल है। समस्या को पुन: उत्पन्न करने के लिए आवश्यक शर्तों को कम करने की कोशिश करें। उपर्युक्त कमांड लाइन बहुत जटिल है, भले ही हम मान लें कि कोड सीधा है और 'ऑपरेटर न्यू' को फिर से परिभाषित करने जैसी चीजें नहीं करता है। –

+0

पहली त्रुटि एक ऑपरेटर नई त्रुटि की सूचना दी है? यदि नहीं, तो पहली त्रुटि क्या रिपोर्ट की गई है? –

+0

हां, रिपोर्ट की गई एकमात्र त्रुटियां ऑपरेटर नई त्रुटियां हैं। वह दिखाया गया पहला है। – mbyrne215

उत्तर

6

वहाँ अपने प्रश्न से काम करने के लिए बहुत कम जानकारी है, लेकिन कुछ कोड नियुक्ति नई के कुछ फार्म का उपयोग करता है जैसे कि यह लग रहा है, और जब तक कि विशेष operator newघोषित (संकलक यह पाता है और कोड को संकलित करता है इसका उपयोग कर), लिंकर को परिभाषा नहीं मिल सकती है।

+0

मुझे यकीन नहीं है कि अन्य जानकारी जोड़ने के लिए क्या है। कोड वास्तव में सरल है; यह 'नया' को फिर से परिभाषित नहीं करता है, इसलिए मुझे नहीं पता कि लिंकर इसे मानक पुस्तकालय से क्यों नहीं ढूंढ सकता है। – mbyrne215

+1

@ mbyrne215: आप सबसे सरल कोड जोड़ सकते हैं जो इसे पुन: उत्पन्न करता है। त्रुटि संदेश स्पष्ट रूप से एक 'ऑपरेटर नया (हस्ताक्षरित int, char const *, int)' ('कमांडलाइन टेस्टरुनर :: parseArguments (TestPlugin *)' से बुलाया गया है, जो स्पष्ट रूप से उस ऑपरेटर का मानक संस्करण नहीं है। – sbi

+2

आप सही हैं; मैं इतने लटका हुआ कि क्यों मानक libs काम नहीं कर रहे थे, मैंने तीसरी पार्टी लाइब्रेरी को बारीकी से नहीं देखा। यह गुप्त रूप से नया परिभाषित कर रहा था। मैंने उस हिस्से को हटा दिया और सब अच्छा है। धन्यवाद। – mbyrne215

46

आपको शायद सी ++ समर्थन रनटाइम लाइब्रेरी से लिंक करने की आवश्यकता है। जब आप g ++ का आह्वान करते हैं तो यह स्वचालित रूप से होता है। लिनक्स पर, यह लिंकर को -lstdC++ ध्वज जोड़कर हासिल किया जाता है। आपको यह पता लगाना होगा कि अपने मंच पर ऐसा कैसे करें।

+0

+1, धन्यवाद .. – Oli

+0

यह वह जवाब था जिसकी समस्या मेरे हल में हुई थी, मेरे पास – yota

4

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

पेज। मुझे पता है कि यह उपयोगी उत्तर के लिए बहुत देर हो चुकी है लेकिन मैं अभी भी इसे रिकॉर्ड के लिए पोस्ट कर रहा हूं।

+0

था, मेरे पूर्ववर्ती से कुछ .o फाइलें थीं, एक साफ करने के बाद छोड़ दिया गया सब कुछ एक आकर्षण की तरह काम करता था – aldr

0

शायद आप gcc पर कॉल कर रहे हैं, g++ के बजाय सी कंपाइलर, जो सी ++ कंपाइलर है।

0

क्यूएनएक्स 6.5.0 के लिए मैंने त्रुटि से बचने के लिए qcc (gcc) के लिए ध्वज -lang-c++ निर्दिष्ट किया है।

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