opengl - सहय - जीसीसी देशों



अन्तर्निहित संदर्भ त्रुटियाँ जब जीएलएफड को मिनजीड जीसीसी के साथ जोड़ते हैं (1)

मैं मिनजीडब्ल्यू का उपयोग करते हुए विंडोज पर GLEW और जीएलएफड के साथ एक ओपन जीएल एप्लीकेशन विकसित करने की कोशिश कर रहा हूं। वर्तमान निर्देशिका में, project/ , मेरे पास निर्देशिका, src/ , bin/ , और glfw-3.0.4.bin.WIN64/ मेरे पास src/ निर्देशिका में glew.c , glew.h , glew.c , और wglew.h

निर्देशिका ./glfw-3.0.4.bin.WIN64/include/ में GLFW/glfw3.h हैडर फ़ाइल है।

निर्देशिका ./glfw-3.0.4.bin.WIN64/lib-mingw/ में glfw3.dll , glfw3dll.a और libglfw3.a

मेरी मुख्य फाइल, test.cpp में है,

#include "glew.h"
#include "GLFW/glfw3.h"

#include <stdio.h>

int main(int argc, char** argv) {
    printf("Hello, World!\n");

    glewInit();
    glfwInit();
}

मैं कार्यक्रम project/ निर्देशिका से कार्यक्रम को संकलित कर रहा हूं (पठनीयता के लिए दो पंक्तियों में विभाजित)

gcc -DGLEW_STATIC -DGLFW_DLL -o ./bin/test ./src/*.cpp ./src/glew.c 
-I ./glfw-3.0.4.bin.WIN64/include/ -L ./glfw-3.0.4.bin.WIN64/lib-mingw/ -lglfw3 -lopengl32

और मुझे निम्न त्रुटि मिल रही है:

undefined reference to `_imp_glfwInit'

मुझे लगता है कि समस्या मेरे साथ जीएलएफडब्ल्यू पुस्तकालय को गलत तरीके से जोड़ती है। कंपाइलर -lglfw3 समेत, मैं समझता हूं कि जीसीसी को लिंक के लिए ./glfw-3.0.4.bin.WIN64/lib-mingw/glfw3.dll , जिसमें glfwInit() लिए परिभाषा glfwInit()

मैंने मेरे जैसी अन्य समस्याओं का समाधान देखा है और वे डेल फाइल को स्रोत / बाइनरी निर्देशिका में प्रतिलिपि बनाने और -l विकल्पों के क्रम को बदलने जैसी चीजों का सुझाव देते हैं, लेकिन मेरे लिए समस्या को हल करने के लिए कोई भी नहीं लग रहा है


आपकी समस्या यह है कि जीसीसी सख्त पुस्तकालय नामकरण सम्मेलनों का पालन करती है। यह glfw3.dll.a को खोजने का प्रयास करता है, लेकिन कोई नहीं पाता (क्योंकि इसका नाम glfw3dll.a - सरल नाम बदलने से आपकी समस्या ठीक हो जाएगी)।

अगला कदम यह libglfw3.a लिए दिखता है, और सफल होता है - लेकिन यह स्थैतिक पुस्तकालय है, जबकि संदर्भ को हेडर फाइलों में गतिशील के रूप में घोषित किया गया है (जटिल विंडो DECLSPECs ... यह समस्या उदाहरण के लिनक्स पर मौजूद नहीं है)। इसलिए, यह _imp__glfwInit नहीं मिल _imp__glfwInit , क्योंकि स्थिर लाइब्रेरी में इसे सिर्फ glfwInit कहा जाता है, इसलिए आपको एक त्रुटि glfwInit

libglfw3.a हटाने का विकल्प भी एक है - उस स्थिति में जीसीसी आगे दिखेगा और आखिरकार glfw3.dll को खोज glfw3.dll और इसका इस्तेमाल करेगा।