2011-05-02 13 views
16

C++ GUI Tutorial: undefined reference to TextOutमैं कोड :: ब्लॉक के साथ लाइब्रेरी से कैसे लिंक करूं?

मुझे एक ही समस्या है, लेकिन मैं प्रोग्रामिंग और कोड :: ब्लॉक के लिए नया हूं, और मैं जीडीआई 32 पुस्तकालय का उपयोग करना चाहता हूं। मैं इसे कैसे स्थापित कर सकता हूं? मैं बहुत उलझन में हूं क्योंकि मैं windows.h हेडर का उपयोग कर सकता हूं, लेकिन TextOut जैसे कुछ फ़ंक्शन उपलब्ध नहीं हैं।

+1

+1 एक मौजूदा जवाब के लिए खोज के लिए। जब आपने अपना सीबी प्रोजेक्ट बनाया था तो आपने किस प्रोजेक्ट प्रकार का चयन किया था? –

उत्तर

40

gdi32 लाइब्रेरी पहले से ही आपके कंप्यूटर पर स्थापित है, कुछ प्रोग्राम इसके बिना चलेंगे। आपका कंपाइलर (यदि सही तरीके से स्थापित किया गया है) सामान्य रूप से एक आयात लाइब्रेरी के साथ आ जाएगा, जो लिंकर आपके प्रोग्राम और सिस्टम में फ़ाइल के बीच बाध्यकारी बनाने के लिए उपयोग करता है।

enter image description here

यह:

gdi32 साथ लिंक करने के लिए (संभावना नहीं है कि आपके मामले संकलक प्रणाली libs के लिए आयात पुस्तकालयों के साथ नहीं आता है, तो आप माइक्रोसॉफ्ट विंडोज प्लेटफार्म एसडीके डाउनलोड करने के लिए की आवश्यकता होगी।) सभी सिस्टम पुस्तकालयों के लिए विश्वसनीय रूप से MinGW-gcc के साथ काम करेंगे (को काम करना चाहिए यदि आप किसी अन्य कंपाइलर का भी उपयोग करते हैं, लेकिन मैं उन चीज़ों के बारे में बात नहीं कर सकता जो मैंने कोशिश नहीं की हैं)। आप लाइब्रेरी का पूरा नाम भी लिख सकते हैं, लेकिन libgdi32.a लिखने से gdi32 पर अधिक लाभ नहीं होने के अलावा कोई फायदा नहीं होता है।
यदि यह किसी कारण से काम करता है, तो आपको एक अलग नाम प्रदान करना पड़ सकता है (उदाहरण के लिए पुस्तकालय का नाम gdi32.lib एमएसवीसी के लिए है)।

कुछ विषम स्थानों या प्रोजेक्ट उपफोल्डर में पुस्तकालयों के लिए, आपको उचित पथनाम प्रदान करना होगा (फ़ाइल चयन संवाद के लिए "..." बटन पर क्लिक करें)।

+2

चित्रों के लिए अच्छा उत्तर +1 :) –

+0

बीटीडब्ल्यू, ओपी को एकल लक्ष्य की बजाय पूरी परियोजना के लिए लिंकर सेटिंग्स बदलनी चाहिए। यह 'प्रोजेक्ट बिल्ड विकल्प' विंडो ('स्क्रीनशॉट पर मेरा प्रोजेक्ट') के अंदर प्रोजेक्ट नाम पर क्लिक करके किया जा सकता है। – HolyBlackCat

+0

हाय, मुझे एसडीएल और एसडीएल_मेज को जोड़ने में कोई समस्या हो रही थी, धन्यवाद, इस उदाहरण ने मुझे बहुत मदद की .. कुछ उदाहरणों में बीटीडब्ल्यू मैंने इसे "-lSDL" और "-lSDL_image" जैसे लिंक करने के लिए कहा है, लेकिन यह ठीक है कमांड लाइन के लिए। कोडब्लॉक आपके लिए "-l" जोड़ता है, इसलिए केवल लाइब्रेरी नाम जोड़ें, जैसा कि आपने GDI32 किया था। उन्हें यह समझाना चाहिए क्योंकि वहां बहुत सारे नोबियां हैं और उलझन में हैं।(मैं एक था) धन्यवाद – HoNgOuRu

0

अनुमान में, आपने कंसोल एप्लिकेशन प्रोजेक्ट बनाने के लिए कोड :: ब्लॉक का उपयोग किया था। ऐसी परियोजना जीडीआई सामान में लिंक नहीं करती है, क्योंकि कंसोल अनुप्रयोग आमतौर पर ग्राफिक्स करने का इरादा नहीं रखते हैं, और TextOut एक ग्राफिक्स फ़ंक्शन है। यदि आप जीडीआई की विशेषताओं का उपयोग करना चाहते हैं, तो आपको Win32 Gui Project बनाना चाहिए, जो आपके लिए जीडीआई में लिंक करने के लिए सेट अप किया जाएगा।

+0

मुझे विश्वास नहीं है कि यह सच है। एक कंसोल अनुप्रयोग के साथ opengl (win32 विंडो निर्माण) का उपयोग कर रहा हूँ और यह अभी भी काम करता है। –

-2

प्रक्रिया करने की जरूरत सारांश यह है कि एक पुस्तकालय का उपयोग: एक बार प्रत्येक पुस्तकालय :

1) पुस्तकालय प्राप्त। वेबसाइट से या पैकेज प्रबंधक के माध्यम से डाउनलोड करें।

2) पुस्तकालय स्थापित करें। इसे निर्देशिका पर अनजिप करें या इसे पैकेज प्रबंधक के माध्यम से इंस्टॉल करें।

3) लाइब्रेरी के लिए हेडर फ़ाइल (ओं) के लिए को कंपाइलर कहां देखें।

4) लाइब्रेरी के लिए लाइब्रेरी फ़ाइल (ओं) के लिए को लिंकर कहां देखें।

5) लिंकर जो लिंक करने के लिए स्थिर या आयात पुस्तकालय फ़ाइलों को बताएं:

एक बार प्रति परियोजना

। 6) # अपने प्रोग्राम में लाइब्रेरी की शीर्षलेख फ़ाइल शामिल करें। 7) सुनिश्चित करें कि प्रोग्राम जानता है जहां किसी भी गतिशील लाइब्रेरी का उपयोग किया जा रहा है।

चरण 1 और 2 - प्राप्त करें और लाइब्रेरी स्थापित करें लाइब्रेरी को अपनी हार्ड डिस्क पर डाउनलोड और इंस्टॉल करें। इस चरण के बारे में अधिक जानकारी के लिए स्थिर और गतिशील पुस्तकालयों पर ट्यूटोरियल देखें। चरण 3 और 4 - कंपाइलर कहें हेडर और लाइब्रेरी फ़ाइलों को खोजने के लिए हम इसे वैश्विक आधार पर करने जा रहे हैं ताकि लाइब्रेरी हमारी सभी परियोजनाओं के लिए उपलब्ध हो। परिणामस्वरूप, निम्नलिखित चरणों को केवल लाइब्रेरी में एक बार करने की आवश्यकता है। ए) "सेटिंग मेनू" पर जाएं और "कंपाइलर" चुनें। बी) "निर्देशिकाएं" टैब पर क्लिक करें। कंपाइलर टैब पहले से ही आपके लिए चुना जाएगा। सी) "जोड़ें" बटन दबाएं, और लाइब्रेरी के लिए .h फ़ाइलों का पथ जोड़ें। यदि आप लिनक्स चला रहे हैं और पैकेज प्रबंधक के माध्यम से लाइब्रेरी स्थापित करते हैं, तो सुनिश्चित करें कि/ usr/include यहां सूचीबद्ध है। डी) "लिंकर" टैब पर क्लिक करें। "जोड़ें" बटन दबाएं, और लाइब्रेरी के लिए .lib फ़ाइलों में पथ जोड़ें। यदि आप लिनक्स चला रहे हैं और ने पैकेज प्रबंधक के माध्यम से लाइब्रेरी स्थापित की है, तो सुनिश्चित करें कि/usr/lib यहां सूचीबद्ध है। ई) "ठीक" बटन दबाएं। चरण 5 - लिंकर को बताएं कि पुस्तकालय आपके प्रोग्राम का उपयोग कर रहे हैं चरण 5 के लिए, हमें लाइब्रेरी से लाइब्रेरी फ़ाइलों को हमारे प्रोजेक्ट में जोड़ने की आवश्यकता है। हम इसे व्यक्तिगत परियोजना के आधार पर करते हैं। ए) डिफ़ॉल्ट वर्कस्पेस (शायद "कंसोल एप्लिकेशन" के तहत बोल्ड प्रोजेक्ट नाम पर राइट क्लिक करें, जब तक कि आप इसे बदल नहीं देते)। मेनू में से "विकल्प बनाएं" चुनें। बी) लिंकर टैब पर क्लिक करें। "लिंक लाइब्रेरीज़" विंडो के तहत, "जोड़ें" बटन दबाएं और लाइब्रेरी जोड़ें, जिसे आप अपनी परियोजना उपयोग करना चाहते हैं। सी) प्रेस "ठीक" बटन

कदम 6 और 7 - # शामिल हैडर फ़ाइलें और सीधे शब्दों में अपनी परियोजना में पुस्तकालय से हेडर फाइल (रों) # शामिल यकीन है कि परियोजना DLLs पा सकते हैं।

स्रोत: http://www.learncpp.com/cpp-tutorial/a3-using-libraries-with-codeblocks/

+2

ठीक है, धन्यवाद लेकिन अब हमारे पास एक अलग समस्या है, अर्थात् चोरी चोरी। आप अपने स्रोत का उद्धरण नहीं दे रहे हैं (http://www.learncpp.com/cpp-tutorial/a3-using- पुस्तकालय-with-codeblocks/), और प्रतिलिपि सब कुछ कॉपी/पेस्ट किया है। क्या आप उस लेख के लेखक हैं? क्या आपको इस आलेख को सीसी-बाय-एसए लाइसेंस के तहत पोस्ट करने की अनुमति है जिसे स्टैक एक्सचेंज का उपयोग करता है? – Mat

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