11

मेरे पास ओपनजीएल 3.2 (+ libs) और FreeType2 का उपयोग कर एक प्रोग्राम है। फिर बूस्ट और ओपनएसएसएल के साथ एक अन्य कार्यक्रम। ओपनजीएल पक्ष यह सुनिश्चित करना था कि पाठ प्रस्तुत किया जा सके और बूस्ट/ओपनएसएल प्रोग्राम एक सुरक्षित लॉगिन/गेम सर्वर करना है।'LIBCMT' अन्य libs के उपयोग के साथ संघर्ष + अनसुलझे बाहरी प्रतीकों

दोनों कार्यक्रम स्वयं से ठीक काम करते हैं।

हालांकि गेम में बूस्ट और ओपनएसएसएल (जीएल + फ्रीटिप) प्रोजेक्ट जोड़ने से यह लिंक करने में असफल रहा।

मैंने निम्नलिखित libs के साथ-साथ फ़ोल्डर भी शामिल किया है।

glimg.lib glutil.lib glfw.lib opengl32.lib freetype.lib glew32.lib user32.lib libeay32.lib ssleay32.lib

लिंकर त्रुटि है।

1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library 
1>libeay32.lib(cryptlib.obj) : error LNK2001: unresolved external symbol [email protected] 
1>libeay32.lib(cryptlib.obj) : error LNK2001: unresolved external symbol [email protected] 
1>libeay32.lib(cryptlib.obj) : error LNK2001: unresolved external symbol [email protected] 
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected] 
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected] 
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected] 
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected] 
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected] 
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected] 
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected] 
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected] 
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected] 
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected] 
1>.\BasicTexture.exe : fatal error LNK1120: 13 unresolved externals 

रनटाइम लाइब्रेरी मल्टी पिरोया DLL (/ एमडी)

पर सेट है मुझे पता नहीं क्या मैं वास्तव में किसी भी मदद की सराहना करेंगे क्या करना है।

+3

अनसुलझे बाहरी आवश्यक पुस्तकालयों ('Advapi32.lib' और 'Gdi32.lib') के खिलाफ लिंक नहीं होने के कारण हैं। पहली चेतावनी इंगित करती है कि आपकी परियोजना और कुछ पुस्तकालय जिनके साथ आप लिंक कर रहे हैं, सीआरटी के संबंध में असंगत लिंकर सेटिंग्स हैं। इसके अलावा ऐसा लगता है कि आप यूनिकोड निर्माण को संकलित नहीं कर रहे हैं। क्या इसका कोई कारण है? – IInspectable

+0

धन्यवाद टिम। यूनिकोड सामान पर निश्चित नहीं है कि मैंने बनाम सोल्यूशन बनाने के लिए प्रीपेक 4 का उपयोग किया और मुझे जो कुछ भी चाहिए (मैंने यूनिकोड के लिए हां चुना है)। क्या आप इसे एक उत्तर देना चाहते हैं क्योंकि आपने इसे ठीक कर दिया है! निर्माण सफल हुआ। आपका बहुत बहुत धन्यवाद! :) – Andrew

उत्तर

13

अनसुलझा बाहरी त्रुटि संदेश तब उत्पन्न होते हैं जब संकलक बाह्य परिभाषित वस्तुओं या कार्यों को संदर्भित कोड उत्पन्न करता है और लिंकर उनको ढूंढने में विफल रहता है।

extern "C" BOOL DeregisterEventSource (HANDLE hEventLog); 

यह (लक्ष्य पते के लिए छोड़कर) एक call अनुदेश का उत्पादन करने के लिए पर्याप्त जानकारी है: एक समारोह कॉल संकलक केवल एक घोषणा की जरूरत लागू कोड बनाने के लिए। extern कीवर्ड संकलक को सूचित करता है कि कार्यान्वयन अन्यत्र परिभाषित किया गया है। नतीजतन यह उस लक्ष्य पते को नहीं जान सकता जिसे बाद में भरना है। जब संकलक किया जाता है तो यह टुकड़ों को एकसाथ जोड़ने के लिए लिंकर का काम होता है। यह आवश्यक पुस्तकालयों को देखने के लिए आयात पुस्तकालयों से एकत्र की गई जानकारी का उपयोग करता है।

विंडोज एपीआई कॉल आसानी से त्रुटि लॉग में देखे जाते हैं। वे एक __imp__ उपसर्ग और कभी कभी एक A या W पोस्टफ़िक्स @<n> के बाद जहां <n> तर्क के लिए आवश्यक बाइट्स की संख्या को इंगित किया है। विंडोज एपीआई कॉल के मामले में आप एमएसडीएन (जैसे DeregisterEventSource) में फ़ंक्शन देख सकते हैं। नीचे आवश्यकताएं हैं जहां आप आयात लाइब्रेरी का नाम पा सकते हैं।

संघर्ष चेतावनी इंगित करती है कि सभी मॉड्यूल एक ही रनटाइम लाइब्रेरी का उपयोग नहीं करते हैं। भले ही यह सिर्फ एक चेतावनी है, यह एक गंभीर मुद्दा है और इसे हल किया जाना चाहिए। यदि आप /MD और /MT कंपाइलर स्विच को मिश्रित करते हैं तो आपको यह चेतावनी मिलती है, लेकिन अगर आप रिहाई और डीबग रनटाइम लाइब्रेरी (जैसे /MD और /MDd) मिश्रण करते हैं तो भी यह चेतावनी प्राप्त करें।इस संदेश का निदान करने के लिए आप यह निर्धारित करने के लिए /VERBOSE:LIB लिंकर स्विच का उपयोग कर सकते हैं कि लिंकर कौन सी लाइब्रेरी खोज रहा है। इस चेतावनी पर अतिरिक्त जानकारी इस MSDN link पर मिल सकती है।

+1

+1 अंतर्दृष्टि के लिए कि __imp__ उपसर्ग एक विंडोज एपीआई कॉल का तात्पर्य है। मैंने लिंकर त्रुटियों में पहले उपसर्ग देखा है लेकिन यह नहीं पता था कि यह प्रतीक के लिए क्यों उपसर्ग किया गया था। – riderBill

16

आप /MD के साथ संकलित करने का प्रयास कर रहे हैं, जो शायद सही विकल्प है, लेकिन कुछ कोड (शायद पुस्तकालयों में से एक) /MT के साथ बनाया गया था, और आप इसे एक ही कार्यक्रम में दोनों तरीकों से नहीं रख सकते हैं। आपको यह पता लगाने की आवश्यकता है कि कौन सी लाइब्रेरी /MT के साथ बनाई गई थी और इसे /MD के साथ पुनर्निर्माण करें।

+1

या, यदि आपके पास अपराधी lib के लिए स्रोत नहीं है, तो अपने प्रोजेक्ट को '/ MT' – AShelly

+0

के साथ लिंक के उत्तर के लिए धन्यवाद, इस मुद्दे को टिम द्वारा एक घंटे के बारे में टिप्पणी में हल किया गया था। मैं उसे जवाब स्वीकार करना चाहता हूं। हालांकि +1। क्योंकि मैंने जांच की थी कि प्रश्न पोस्ट करने से पहले सबकुछ एमडी थ्रेड किया गया था। – Andrew

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