setup portable para descargar compiler c windows opengl mingw undefined-reference

c - para - mingw portable



Referencias no definidas a_imp____ glew*funciones con minGW gcc (1)

Estoy tratando de compilar un programa OpenGL relativamente simple usando MinGW en un sistema Win 7 x64, y sigo obteniendo referencias indefinidas a varias de las funciones de GLEW. He configurado las bibliotecas para vincularlas con los programas y he estado buscando en mi lista cualquier biblioteca que pueda estar perdiendo, sin embargo, el resultado del enlazador sigue siendo así:

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 `_imp__glewInit@0'' collect2: ld returned 1 exit status 16:35:50 Build Finished (took 675ms)

He intentado con -lglew32 y -lglew32s en varias configuraciones diferentes, pensando que tal vez había definiciones en glew32s que no estaban en glew32, y esto no ayudó. ¿Alguna guía sobre lo que me puede estar perdiendo, o algo que he pasado por alto?


Necesita #define GLEW_STATIC antes #include "glew.h" si está utilizando la biblioteca de enlaces estáticos. Continuaría y agregaría una regla a su Makefile para definir este token previo al procesador, en lugar de poner realmente #define ... en su código fuente.

Esto se menciona en la documentación de instalación para GLEW, por cierto. Pero a juzgar por la cantidad de veces que se formula esta pregunta, puede que no se indique con suficiente claridad.

ACTUALIZAR:

La razón para definir este token es que Microsoft Windows usa un __declspec (...) especial __declspec (...) para las importaciones y exportaciones de DLL. Al definir GLEW_STATIC , le está diciendo al vinculador que use un comportamiento estándar para ubicar los símbolos en su .lib .

Cuando GLEW_STATIC no está definido, informa al vinculador que los símbolos de la biblioteca se resuelven en tiempo de ejecución. Pero MSVC necesita saber si está creando exportaciones o buscando importaciones, por lo que hay otro token GLEW_BUILD que define este comportamiento. Como desea vincular (importar) y no compilar (exportar) GLEW, asegúrese de no definir 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


También vale la pena mencionar que no puede usar los archivos .lib enlace dinámico .lib y los archivos DLL que se suministran en el sitio web oficial de GLEW. Se compilan usando MSVC; para usar un archivo DLL compilado con MSVC en MinGW, consulte este enlace . La mejor solución es simplemente evitar el uso de la biblioteca de enlaces dinámicos y usar la biblioteca estática.