opengl - Errores de referencia no definidos al vincular GLFW con minGW gcc
(1)
Su problema es que gcc sigue estrictas convenciones de nomenclatura de bibliotecas. Intenta encontrar glfw3.dll.a
, pero no encuentra ninguno (porque se llama glfw3dll.a
- el cambio de nombre simple solucionará el problema).
El siguiente paso busca libglfw3.a
, y tiene éxito, pero es una biblioteca estática, mientras que la referencia se declara como dinámica en los archivos de encabezado (ventanas difíciles DECLSPEC ... este problema no existe, por ejemplo, en Linux). Por lo tanto, no puede encontrar _imp__glfwInit
, porque en la biblioteca estática se llama simplemente glfwInit
, por lo que se obtiene un error.
La eliminación de libglfw3.a
también es una de las opciones; en ese caso, gcc buscará más y finalmente encontrará glfw3.dll
y lo usará.
Estoy tratando de desarrollar una aplicación OpenGL con GLEW y GLFW en Windows usando minGW. En el directorio actual, project/
, tengo los directorios src/
, bin/
, y glfw-3.0.4.bin.WIN64/
. Tengo los archivos test.cpp
, glew.h
, glew.c
y wglew.h
en el directorio src/
.
El directorio ./glfw-3.0.4.bin.WIN64/include/
contiene el archivo de encabezado GLFW/glfw3.h
.
El directorio ./glfw-3.0.4.bin.WIN64/lib-mingw/
contiene glfw3.dll
, glfw3dll.a
y libglfw3.a
.
Mi archivo principal, test.cpp
contiene,
#include "glew.h"
#include "GLFW/glfw3.h"
#include <stdio.h>
int main(int argc, char** argv) {
printf("Hello, World!/n");
glewInit();
glfwInit();
}
Estoy compilando el programa desde el project/
directorio ejecutando (dividido en dos líneas para facilitar la lectura)
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
y recibo el siguiente error:
undefined reference to `_imp_glfwInit''
Creo que el problema tiene que ver conmigo al vincular la biblioteca GLFW incorrectamente. Por lo que entiendo, incluida la opción del compilador -lglfw3
le dirá a gcc que enlace ./glfw-3.0.4.bin.WIN64/lib-mingw/glfw3.dll
, que contiene la definición de glfwInit()
.
He analizado soluciones a otros problemas similares a los míos y sugieren cosas como copiar el archivo dll a los directorios fuente / binarios y cambiar el orden de las opciones -l, pero ninguno pareció resolver el problema por mí.