Visual C++ कंपाइलर के 64-बिट संस्करण में आपको LNK4197 त्रुटि प्राप्त

लागू: Visual C++ 2010 Express

सारांश


जब आप Microsoft Visual C++ कंपाइलर और Linker के 64-बिट संस्करण का उपयोग करके कोई DLL बनाएँ, निर्यात के लिए एक से अधिक बार एक फ़ंक्शन घोषित किया गया है, तो आप Linker त्रुटि संख्या LNK4197 प्राप्त हो सकता है।

लक्षण


Linker आउटपुट निम्न के जैसा हो सकता है:
C:\>link /NOLOGO /def:Sample.def /pdb:Sample.pdb /out:Sample.dll  Sample.objSample.obj : warning LNK4197: export 'DllSample' specified multiple times; using first specification   Creating library Sample.lib and object Sample.exp 

कारण


Linker त्रुटि संख्या LNK4197 उत्पन्न होती है जब कोई फ़ंक्शन निर्यात के लिए एक से अधिक बार घोषित किया गया है। किसी फ़ंक्शन निम्न तरीकों में से एक में निर्यात के लिए घोषित है:
  • C स्रोत फ़ाइल में __declspec(dllexport) कीवर्ड का उपयोग करते हुए फ़ंक्शन घोषित है:
    __declspec(dllexport) int DllSample() {   return 42;}
  • मॉड्यूल-निर्धारण का उपयोग करते हुए फ़ंक्शन घोषित (। डि) फ़ाइल:
    EXPORTS   DllSample
अक्सर यह Linker त्रुटि हो सकती है जब दोनों __declspec(dllexport) कीवर्ड और एक। डि फ़ाइल में एक ही फ़ंक्शन नाम निर्धारित करने के लिए प्रयुक्त होते हैं एक है। DLL प्रोजेक्ट।

समाधान


इस व्यवहार के समाधान के लिए, निर्यात किए गए फ़ंक्शंस केवल एक बार, __declspec(dllexport) कीवर्ड का उपयोग कर या का उपयोग करके परिभाषित एक। फ़ाइल डि। दोनों इन विधियों का उपयोग न करें।

स्थिति


यह व्यवहार डिज़ाइन के अनुसार है।

अधिक जानकारी


Declaring एक से अधिक समय में निर्यात के लिए कोई फ़ंक्शन Microsoft Windows C++ कंपाइलर और Linker के 32-बिट संस्करणों में इस आलेख के "लक्षण" खंड में वर्णन किया गया है जो Linker त्रुटि उत्पन्न नहीं हो सकता है। हालाँकि, Microsoft अनुशंसा करता है कि आप फ़ंक्शन निर्यात करता एक ही समय में Windows C++ कंपाइलर और Linker के 32-बिट और 64-बिट दोनों संस्करणों परिभाषित।