(Solucionado) Error en Visual Studio 2013 al enlazar con los binarios de GLFW

Iniciado por Seyro97, 13 Mayo 2015, 18:20 PM

0 Miembros y 1 Visitante están viendo este tema.

Seyro97

Hola. Muy buenas a tod@s. Hoy se me presenta un problema bastante frustrante porque no tiene que ver con C++ y no he encontrado la solución en Internet.

El problema es que al compilar un sencillo código sobre GLFW, me da error al enlazar con dicha librería.

Código de error:
Código (cpp) [Seleccionar]
1>main.obj : error LNK2019: símbolo externo _glfwInit sin resolver al que se hace referencia en la función _main
1>main.obj : error LNK2019: símbolo externo _glfwTerminate sin resolver al que se hace referencia en la función _main
1>main.obj : error LNK2019: símbolo externo _glfwSetErrorCallback sin resolver al que se hace referencia en la función _main
1>main.obj : error LNK2019: símbolo externo _glfwCreateWindow sin resolver al que se hace referencia en la función _main
1>main.obj : error LNK2019: símbolo externo _glfwDestroyWindow sin resolver al que se hace referencia en la función _main
1>main.obj : error LNK2019: símbolo externo _glfwWindowShouldClose sin resolver al que se hace referencia en la función _main
1>main.obj : error LNK2019: símbolo externo _glfwSetWindowShouldClose sin resolver al que se hace referencia en la función "void __cdecl key_callback(struct GLFWwindow *,int,int,int,int)" (?key_callback@@YAXPAUGLFWwindow@@HHHH@Z)
1>main.obj : error LNK2019: símbolo externo _glfwPollEvents sin resolver al que se hace referencia en la función _main
1>main.obj : error LNK2019: símbolo externo _glfwSetKeyCallback sin resolver al que se hace referencia en la función _main
1>main.obj : error LNK2019: símbolo externo _glfwMakeContextCurrent sin resolver al que se hace referencia en la función _main
1>main.obj : error LNK2019: símbolo externo _glfwSwapBuffers sin resolver al que se hace referencia en la función _main
1>main.obj : error LNK2019: símbolo externo _glfwSwapInterval sin resolver al que se hace referencia en la función _main


Como ven, todos estos errores vienen de que hay problemas al enlazar con las dependecias de GLFW. Bien, los pasos que seguí son los siguientes:

1) Crear proyecto 'aplicación de consola de consola' en VS2013
2) Acceder a las propiedades del proyecto
3) En el apartado general de C++, añadí las carpetas de include donde están los headers de GLFW (C:\Users\Carlos\Desktop\Programacion\Cpp\Prueba\include)
4) En en apartado general de 'vinculador' he añadido las carpetas donde están los binarios .lib de GLFW (C:\Users\Carlos\Desktop\Programacion\Cpp\Prueba\binaries\lib-vc2013)
5) Último paso: en el apartado entrada del vinculador añadí esto:
opengl32.lib
glfw3.lib
glfw3dll.lib
Además de estas, hay agregadas por defecto

Bueno. En último lugar les enseñaré el código por si sirve de algo:

Código (cpp) [Seleccionar]
#include <GLFW/glfw3.h>

#include <stdlib.h>
#include <stdio.h>

static void error_callback(int error, const char* description) {
fputs(description, stderr);
}

static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
if(key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);
}

int main(void) {
GLFWwindow* window;

glfwSetErrorCallback(error_callback);

if(!glfwInit())
exit(EXIT_FAILURE);

window = glfwCreateWindow(640, 480, "Simple example", NULL, NULL);
if(!window) {
glfwTerminate();
exit(EXIT_FAILURE);
}

glfwMakeContextCurrent(window);
glfwSwapInterval(1);

glfwSetKeyCallback(window, key_callback);

while(!glfwWindowShouldClose(window)) {
glClear(GL_COLOR_BUFFER_BIT);

glfwSwapBuffers(window);
glfwPollEvents();
}

glfwDestroyWindow(window);

glfwTerminate();
exit(EXIT_SUCCESS);
}


Espero que me puedan ayudar :P ¡Muchas gracias por su atención!
Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!

x64core

Los simbolos parecen ser de C... estas compilando como C++? intenta compilar como C. Sino revisemos los .obj aver como estan los simbolos y los de la libreria. Aunque en las cabeceras deberia resolver ese problema del nombre del simbolo asegurate que los simbolos estan en las librerias que dices.

Seyro97

#2
El archivo main está guardado como extensión .c (o sea, que está en c) Ahora bien, en un tutorial sobre GLFW encontré la siguiente "frase": 'Callbacks are simply C functions (or C++ static methods)' La verdad, no se a que se refiere. Espero que ustedes lo comprendan :P




Creí que tenía instalado VS2013 a 64 bits, pero resulta que lo tenía a 32... y me descargué GLFW a 64 bits...

¡Muchas gracias por sus respuestas!
Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!