c - Minigw जीसीसी के साथ काम करने के लिए_imp____ ग्रिल*कार्यों के लिए अपरिभाषित संदर्भ



windows opengl (1)

यदि आप स्थैतिक लिंकिंग लाइब्रेरी का उपयोग कर रहे हैं तो #include "glew.h" को #define GLEW_STATIC से पहले #include "glew.h" करने की आवश्यकता है। मैं अपने प्रोसेसर टोकन को परिभाषित करने के लिए आगे बढ़कर अपने मेकफील में एक नियम जोड़ूंगा, बजाय अपने स्रोत कोड में #define ... डालने के बजाय #define ...

इस तरह से, GLEW के लिए स्थापना दस्तावेज में इसका उल्लेख किया गया है। लेकिन इस प्रश्न के बारे में कई बार पूछे जाने पर यह स्पष्ट रूप से पर्याप्त नहीं बताया जा सकता है।

अद्यतन करें:

इस टोकन को परिभाषित करने का कारण यह है कि Microsoft Windows डीएलएल आयात और निर्यात के लिए एक विशेष __declspec (...) का उपयोग करता है। GLEW_STATIC को परिभाषित GLEW_STATIC , आप लिंकर को अपने GLEW_STATIC में प्रतीकों का पता लगाने के लिए मानक व्यवहार का उपयोग करने के लिए कह रहे हैं।

जब GLEW_STATIC अपरिभाषित है, तो यह लिंकर को सूचित करता है कि लाइब्रेरी के प्रतीकों को रनटाइम पर हल किया जाता है लेकिन एमएसवीसी को यह जानना होगा कि क्या वह निर्यात कर रहा है या आयात की तलाश कर रहा है और ऐसा एक और टोकन है जो इस व्यवहार को परिभाषित करता है GLEW_BUILD चूंकि आप (आयात) से लिंक करना चाहते हैं, और निर्माण (निर्यात) GLEW नहीं, सुनिश्चित करें कि आप GLEW_BUILD को परिभाषित नहीं करते हैं

/*
 * GLEW_STATIC is defined for static library.
 * GLEW_BUILD  is defined for building the DLL library.
 */

#ifdef GLEW_STATIC
#  define GLEWAPI extern
#else
#  ifdef GLEW_BUILD
#    define GLEWAPI extern __declspec(dllexport)
#  else
#    define GLEWAPI extern __declspec(dllimport)
#  endif
#endif


यह भी उल्लेखनीय है कि आप आधिकारिक GLEW वेबसाइट पर दिए गए पूर्व-निर्मित डायनेमिक लिंकिंग। लिब और डीएलएल फाइलों का उपयोग नहीं कर सकते हैं। वे एमएसवीसी का उपयोग कर संकलित हैं; मिनजीड में एमएसवीसी के साथ संकलित DLL का उपयोग करने के लिए यह लिंक देखें। बेहतर समाधान सिर्फ डायनेमिक लिंक लाइब्रेरी का इस्तेमाल करने और स्थैतिक पुस्तकालय का उपयोग करने से बचने के लिए है।

मैं एक विन 7 x 64 सिस्टम पर मिनजीड का इस्तेमाल करते हुए एक अपेक्षाकृत सरल ओपनजीएल प्रोग्राम को संकलित करने की कोशिश कर रहा हूं, और मैं कई GLEW फ़ंक्शंस के अपरिभाषित संदर्भ प्राप्त करता हूं। मैंने कार्यक्रमों से लिंक करने के लिए पुस्तकालयों को निर्धारित किया है, और मुझे अपनी सूची में से किसी भी पुस्तकालय के लिए देख रहे हैं, फिर भी लिंकर से आउटपुट इस प्रकार दिखता है:

16:35:50 **** Incremental Build of configuration Debug for project test ****
Info: Internal Builder is used for build
gcc -LD:/DEV/openGL/lib/x86 -LD:/DEV/x86/lib -o test.exe test.o -lfreeglut -lglaux -lglew32s -lglu32 -lglfw3 -lopengl32 -lgdi32 
test.o: In function `init':
E:\Development\C\test\Debug/../test.c:32: undefined reference to `_imp____glewGenVertexArrays'
E:\Development\C\test\Debug/../test.c:33: undefined reference to `_imp____glewBindVertexArray'
E:\Development\C\test\Debug/../test.c:35: undefined reference to `_imp____glewGenBuffers'
E:\Development\C\test\Debug/../test.c:36: undefined reference to `_imp____glewBindBuffer'
E:\Development\C\test\Debug/../test.c:37: undefined reference to `_imp____glewBufferData'
test.o: In function `display':
E:\Development\C\test\Debug/../test.c:45: undefined reference to  `_imp____glewBindVertexArray'
test.o: In function `main':
E:\Development\C\test\Debug/../test.c:61: undefined reference to `[email protected]'
collect2: ld returned 1 exit status

16:35:50 Build Finished (took 675ms)

मैंने कई अलग-अलग कॉन्फ़िगरेशनों में -lglew32 और -lglew32s दोनों के साथ कोशिश की है, सोचते हैं कि शायद glew32s में परिभाषाएं थीं जो कि glew32 में नहीं थीं, और इससे मदद नहीं मिली। मैं क्या याद रख सकता हूं, या जिस चीज़ की मैंने अनदेखी की है, उसका कोई मार्गदर्शन क्या है?





undefined-reference