2009-02-17 11 views
11

मैं एक परियोजना मैं दृश्य C++ 2008 को काम कर रहा हूँ में fmod उपयोग कर रहा हूँ अगर मैंइस पुस्तकालय को प्रज्ञा टिप्पणी से लिंक क्यों नहीं किया जा रहा है?

../fmodapi375win/api/lib/fmodvc.lib 
परियोजना में

> Linker-> इनपुट, यह ठीक है, काम करता शामिल हैं, लेकिन किसी कारण से अगर मैं का उपयोग

#pragma comment(lib,"../fmodapi375win/api/lib/fmodvc.lib") 

बजाय यह एक ही काम करता है के रूप में यदि उस रेखा वहाँ नहीं था: यह कोई लिंकर त्रुटियों के साथ बनाता है तो एक लाख पहुँच उल्लंघन अपवाद से एक ढेर अतिप्रवाह के साथ दुर्घटनाओं।

क्या हो रहा है, और मैं इसे कैसे ठीक कर सकता हूं ताकि मैं कोड में lib को परिभाषित कर सकूं?

उत्तर

1

लिब्स को दूसरे क्रम में जोड़ा जा सकता है, इसलिए प्रतीकों को अलग-अलग हल किया जाता है।

0

लिंक की कमांड लाइन पर सेट/वर्बोज़ सेट करें। जीयूआई में, आप इसे प्रोजेक्ट के प्रॉपर्टी पेज पर कर सकते हैं - लिंकर के तहत "कमांड लाइन" नोड में जोड़ें।

फिर यह आपको बताएगा कि यह प्रत्येक फ़ंक्शन को कैसे हल करता है - एक फ़ंक्शन की खोज जिसे आप जानते हैं fmodvc.lib में होना चाहिए।

लिंक करने के दौरान PROCMON.EXE चलाने के लिए एक और चीज है (प्री-फ़िल्टर ताकि पैथ में fmodvc.lib शामिल हो) - फिर लिंक करें। यह आपको फ़ाइल को सही स्थान बताएगा (और यदि उसने कभी इसकी तलाश की है)। अंत में http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

, अगर यह लिंक कर रहा है, लेकिन अपने पुस्तकालय लोड हो रहा है (या संदर्भ के समाधान) नहीं आपको लगता है कि बंद कर देना चाहिए - - आप सेट सफल होने के लिए कड़ी के लिए मजबूर करने का विकल्प हो सकता: यहाँ PROCMON प्राप्त करें। यह कमांड लाइन सेक्शन में /FORCE होगा (जैसे/VERBOSE)।

+1

प्रोसेस मॉनिटर * स्थिर रूप से जुड़े * पुस्तकालयों को ढूंढने जा रहा है? लिंक के दौरान –

+3

, हां। लिंक के दौरान, लिंकर को फ़ाइलों को खोलने की कोशिश करनी चाहिए - प्रोमन इसे देखेगा। –

7

मुझे नहीं लगता कि आपको प्रज्ञा टिप्पणी में .lib प्रदान करना है, लेकिन, मुझे लगता है कि असली समस्या यह है कि आप पथ द्वारा टिप्पणी बुला रहे हैं। अपने lib खोज पथ के लिए पथ जोड़ें, और फिर बस का उपयोग एक

#pragma comment(lib,"fmodvc") 

आप इस टिप्पणी में एक पथ का उपयोग करने में सक्षम होना चाहिए रहे हैं, लेकिन क्या आप वाकई .. \ पथ प्रयोग कर रहे हैं सही है, लिंक समय के दौरान पथ? यह भी सुनिश्चित करें कि आप/nodefaultlib के साथ संकलित नहीं कर रहे हैं ...

मुझे बताएं कि यह अभी भी काम नहीं करता है। मैंने इस प्रकार की प्रगति का उपयोग बहुत सफलता के साथ किया है ...

लेकिन अब, मैं सी # दुनिया में बहुत ज्यादा फंस गया हूं, मुझे अब सी ++ में प्रोग्राम करने में ज्यादा समय नहीं है। ..

+1

स्टुअर्ट, मैं इस पोस्ट के बाद से वापस गया हूं, और मैंने #pragma का उपयोग किया है जिसका आप उपयोग कर रहे हैं, और यह काम करता है। आपको बस यह सुनिश्चित करना होगा कि आप वास्तव में सही निर्देशिका से लिंक कर रहे हैं। मेरा अनुमान है ../ सही नहीं है, क्योंकि लिंकर $ (TargetDir) निर्देशिका से बाहर काम करता है ... उम्मीद है कि इससे मदद मिलती है। मुझे बताएं कि यह अभी भी काम नहीं करता है, और मैं आगे भी खोदूँगा ... – LarryF

+0

+1/nodefaultlib के अवलोकन के लिए +1। यह मुझे गार्ड से पकड़ा कि यह काम करने से '#pragma टिप्पणी (lib, ...)' रखेगा। –

0

क्या आप बिल्कुल निश्चित हैं कि यह दो उदाहरणों में एक ही lib फ़ाइल है?

यदि आप इस तथ्य को याद करते हैं कि आपकी मशीन पर फ़ाइल के दो संस्करण हैं तो यह बहुत अजीब हो सकता है। मैं गंभीरता से सुझाव देता हूं कि आप इस फ़ाइल की सभी घटनाओं के लिए केवल एक सैनिटी चेक करने के लिए अपने ड्राइव की खोज करें।

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