2009-09-16 9 views
23

विजुअलस्टूडियो के साथ एक COM dll उत्पन्न करते समय, सभी Iवास्तव मेंDllCanUnloadNow प्रतीक (और तीन संबंधित वाले) को डीएलएल से निर्यात करने की आवश्यकता है। कोई भी मेरी लाइब्रेरी के खिलाफ लिंक करने जा रहा है, इसलिए मैं एक .lib फ़ाइल में दिलचस्पी नहीं रखता हूं, न ही एक .exp फ़ाइल में।लेकिन मुझे यह नहीं चाहिए कि मेरी COM लाइब्रेरी के लिए .lib या .exp फ़ाइल!

हालांकि, मैं इन फ़ाइलों के निर्माण को बाधित करने का प्रबंधन नहीं करता हूं। (ध्यान दें: मैं जानता हूँ कि कैसे यह उन्हें एक के बाद निर्माण चरण में दूर करने के लिए संभव है)

ये मेरी लिंकर तर्क हैं:

/OUT:"u:/cada-nt/bin/PData.dll" 
/INCREMENTAL:NO 
/NOLOGO 
/DLL 
/MANIFEST:NO 
/DEF:"PData.def" 
/DEBUG 
/PDB:"u:/cada-nt/pdb/PData.pdb" 
/ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
        advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
        odbc32.lib odbccp32.lib 

प्रश्न:

  • किसी में सफल रहा है .lib और .exp फ़ाइलों को उत्पन्न नहीं करता है?
  • क्या किसी को पता है क्यों इन फ़ाइलों को उत्पन्न किया गया है?

उत्तर

-1

इन फ़ाइलों को उत्पन्न करने में कोई समस्या क्यों है? निश्चित रूप से यदि लोग सीधे उनसे लिंक नहीं कर रहे हैं तो आपको केवल उन फ़ाइलों को वितरित नहीं करना है और केवल डीएलएल वितरित करना है।

+11

कोई तत्काल समस्या है से सभी __declspec (dllexport) को हटाने की जरूरत के निर्माण से बचने के लिए। मेरे पास एक कामकाज भी है। यह सिर्फ बेकार है कि लिंकर उन्हें उत्पन्न करता है। फ़ाइलें स्वचालित रूप से आउटपुट फ़ोल्डर पर हैं, जो डीएल के बगल में वितरित करने की आवश्यकता है। यह अव्यवस्था है। यह परेशान करता है। – xtofl

+1

टीबीएच मैं स्पष्ट कारणों से, चीजों की सूची पर इतना कम नीचे मानता हूं कि किसी ने कभी भी ऐसा करने पर परेशान नहीं किया है। – Goz

+10

-1: यह एक बिल्कुल उचित अनुरोध है। मैं भी यही अनुरोध करता हूं, उसी कारण से, वे फ़ाइलें परेशान हैं। – demoncodemonkey

2

सुनिश्चित नहीं हैं कि उन्हें बंद करने के लिए, लेकिन आप एक के बाद निर्माण कदम उन्हें हटाने के लिए, इस तरह बना सकते हैं:

del $(OutDir)\$(ProjectName).lib 
del $(OutDir)\$(ProjectName).exp 

(VS2008 पर यह [परियोजना] -> [गुण], तो विन्यास गुण> बिल्ड घटनाक्रम-> पोस्ट-बिल्ड घटनाक्रम)

(ध्यान दें मुझे पता है आप ऐसा करने के तरीके पता है, लेकिन क्या यह उत्तर अगले गूगलर मदद मिल सकती है ...)

+5

यह एक हैक है। –

+2

इस वर्कअराउंड का दुष्प्रभाव यह है कि संकलन हर बार होता है, क्योंकि संकलक फ़ाइलों को फिर से बनाना चाहता है। –

15

दृश्य स्टूडियो के संयोजक एक /IMPLIB का विकल्प है जो आपको अपनेके लिए आउटपुट स्थान निर्दिष्ट करने की अनुमति देता हैऔर .exp फाइलें।

आप एक परियोजना के गुणों में इस विकल्प को संशोधित कर सकते हैं: उदाहरण के लिए

Configuration Properties > Linker > Advanced > Import Library 

आप निम्नलिखित के लिए सेट कर सकते हैं,:

$(Configuration)\$(TargetName).lib 

लिंकर समान नाम का उपयोग .exp फ़ाइल बनाएगा .lib के रूप में।

+4

ओपी ने क्या नहीं पूछा था। वह लिंकर द्वारा बनाई गई उन फ़ाइलों को नहीं चाहते हैं, एक अलग फ़ोल्डर – philk

1

COM पुस्तकालय के अंदर कुछ फ़ंक्शन __declspec (dllexport) के रूप में घोषित किए गए हैं। इसका मतलब है कि उन्हें निर्यात किया जाता है (GetProcAdress फ़ंक्शन द्वारा उपयोग किया जा सकता है) और लिंकर सोचता है कि इस गतिशील लाइब्रेरी से लिंक करने की आवश्यकता है (चाहे वह एक्सई या डीएल हो - सामान्य रूप से संरचना समान है) और * .lib और * .exp फ़ाइल।

इन फ़ाइलों को आप कार्यों घोषणाओं

+0

रोचक में नहीं, क्या आप एक विशिष्ट मंच पर इंगित करते हैं? – DanielV

+1

यह विजुअल स्टूडियो 2013 डिफ़ॉल्ट कंपाइलर और लिंकर के लिए सत्यापित किया गया था। लक्ष्य मंच या तो x64 या x86 या Windows है। –

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