2011-09-13 12 views
5

से लिंक करते समय मैं एक ऑब्जेक्ट फ़ाइल को लिंक करने का प्रयास कर रहा हूं जो winuser.h में घोषित दो विधियों का उपयोग करता है और User32.dll: GetMonitorInfo और WindowFromMonitor में परिभाषित किया गया है। स्रोत ठीक एक वस्तु फाइल करने के लिए संकलित, लेकिन जब मैं लिंक करने के लिए प्रयास करते हैं, मैं निम्न त्रुटि आउटपुट प्राप्त:Link32 त्रुटि उपयोगकर्ता32.dll

D3dCtx.obj : error LNK2001: unresolved external symbol xGetMonitorInfo 
D3dCtx.obj : error LNK2001: unresolved external symbol xMonitorFromWindow 

बात है, मैं "xGetMonitorInfo" या "xMonitorFromWindow" कहते हैं नहीं है। सभी स्रोत फ़ाइलों पर grep चलाना दिखाता है कि केवल "GetMonitorInfo" और "WindowFromMonitor" कहा जा रहा है। मैं windows.h सहित ठीक से हूँ, जिसमें winuser.h शामिल है। मैं लिंकर विकल्पों में भी अपनी LIBPATH को ठीक से सेट कर रहा हूं, जिसे वर्बोज़ लिंक आउटपुट द्वारा पुष्टि की जाती है।

निम्नलिखित भी मेरी वर्बोज़ लिंक आउटपुट में प्रकट होता है:

Found __imp_GetMonitorInfoA 
    Referenced in nafxcw.lib(afxribboncategory.obj) 
    Referenced in nafxcw.lib(afxtooltipctrl.obj) 
    Referenced in nafxcw.lib(afxribbonkeytip.obj) 
    Referenced in nafxcw.lib(afxfullscreenimpl.obj) 
    Referenced in nafxcw.lib(afxframeimpl.obj) 
    Referenced in nafxcw.lib(afxglobalutils.obj) 
    Referenced in nafxcw.lib(afxdropdowntoolbar.obj) 
    Referenced in nafxcw.lib(wincore.obj) 
    Referenced in nafxcw.lib(afxglobals.obj) 
    Referenced in nafxcw.lib(afxpopupmenu.obj) 
    Referenced in nafxcw.lib(afxpropertygridtooltipctrl.obj) 
    Loaded User32.lib(USER32.dll) 
Found __imp_MonitorFromWindow 
    Referenced in nafxcw.lib(wincore.obj) 
    Loaded User32.lib(USER32.dll) 

इसके अलावा, GetMonitorInfo रूप winuser.h में परिभाषित किया गया है:

WINUSERAPI 
BOOL 
WINAPI 
GetMonitorInfoA(
    __in HMONITOR hMonitor, 
    __inout LPMONITORINFO lpmi); 
WINUSERAPI 
BOOL 
WINAPI 
GetMonitorInfoW(
    __in HMONITOR hMonitor, 
    __inout LPMONITORINFO lpmi); 
#ifdef UNICODE 
#define GetMonitorInfo GetMonitorInfoW 
#else 
#define GetMonitorInfo GetMonitorInfoA 
#endif // !UNICODE 

जब मैं सभी संदर्भ के लिए "GetMonitorInfo" बदल "करने के लिए GetMonitorInfoA ", मुझे केवल

D3dCtx.obj: त्रुटि LNK2001: अनसुलझा बाहरी प्रतीक xMonitorFromWindow

मेरे लिंकर त्रुटि आउटपुट के रूप में। दुर्भाग्यवश, MonitorFromWindow में कई संस्करण उपलब्ध नहीं हैं।

मुझे ध्यान रखना चाहिए कि मैं पुस्तकालयों, लिंक और सीएल के 64 बिट संस्करणों का उपयोग कर रहा हूं।

यहां क्या हो रहा है, और मैं अपने प्रोग्राम को सफलतापूर्वक कैसे लिंक कर सकता हूं?

+1

मैक्रो परेशानी की तरह क्वैक। X ## –

+0

के लिए Grep ठीक है, मुझे ऐसा मैक्रो नहीं मिला जो इसका कारण बन रहा था, और केवल एक फ़ाइल इन कार्यों को संदर्भित करती है। हालांकि, आपकी टिप्पणी ने मुझे मैक्रोज़ का उपयोग करके समस्या के आसपास काम करने के लिए प्रेरित किया। यह सबसे अच्छा समाधान नहीं है (और यह मुझे थोड़ा दर्द देता है), लेकिन इस कोड को वास्तव में संकलित करने की आवश्यकता है, बनाए रखा नहीं है। –

उत्तर

2

मैं नहीं जानता कि क्या आप इस या नहीं करने के लिए समाधान खोजने के लिए सक्षम थे लेकिन मैं एक ही समस्या और कारण यह हो रहा था कि मैं एक फ़ाइल का नाम multimon.h शामिल

के मामले में ऐसा लगता है कि पड़ा था 64 बिट संकलन, मैक्रो परिभाषाओं के कारण, इन कार्यों की परिभाषा दो स्रोतों से आ रही है और शायद multimon.h से एक ओवरराइडिंग है और गलत है।

मैंने इसे शामिल करके टिप्पणी करके हल किया और यह ठीक से लिंक करना शुरू कर दिया है।

//#include <multimon.h> 
+0

धन्यवाद, मेरा काम-आसपास बस मैक्रोज़ को फिर से परिभाषित करने के बाद था, लेकिन वास्तविक समाधान को जानना अच्छा लगा। –

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