Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Seyro97 en 13 Mayo 2015, 18:20 pm



Título: (Solucionado) Error en Visual Studio 2013 al enlazar con los binarios de GLFW
Publicado por: Seyro97 en 13 Mayo 2015, 18:20 pm
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
  1. 1>main.obj : error LNK2019: símbolo externo _glfwInit sin resolver al que se hace referencia en la función _main
  2. 1>main.obj : error LNK2019: símbolo externo _glfwTerminate sin resolver al que se hace referencia en la función _main
  3. 1>main.obj : error LNK2019: símbolo externo _glfwSetErrorCallback sin resolver al que se hace referencia en la función _main
  4. 1>main.obj : error LNK2019: símbolo externo _glfwCreateWindow sin resolver al que se hace referencia en la función _main
  5. 1>main.obj : error LNK2019: símbolo externo _glfwDestroyWindow sin resolver al que se hace referencia en la función _main
  6. 1>main.obj : error LNK2019: símbolo externo _glfwWindowShouldClose sin resolver al que se hace referencia en la función _main
  7. 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)
  8. 1>main.obj : error LNK2019: símbolo externo _glfwPollEvents sin resolver al que se hace referencia en la función _main
  9. 1>main.obj : error LNK2019: símbolo externo _glfwSetKeyCallback sin resolver al que se hace referencia en la función _main
  10. 1>main.obj : error LNK2019: símbolo externo _glfwMakeContextCurrent sin resolver al que se hace referencia en la función _main
  11. 1>main.obj : error LNK2019: símbolo externo _glfwSwapBuffers sin resolver al que se hace referencia en la función _main
  12. 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
  1. #include <GLFW/glfw3.h>
  2.  
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5.  
  6. static void error_callback(int error, const char* description) {
  7. fputs(description, stderr);
  8. }
  9.  
  10. static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
  11. if(key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
  12. glfwSetWindowShouldClose(window, GL_TRUE);
  13. }
  14.  
  15. int main(void) {
  16. GLFWwindow* window;
  17.  
  18. glfwSetErrorCallback(error_callback);
  19.  
  20. if(!glfwInit())
  21. exit(EXIT_FAILURE);
  22.  
  23. window = glfwCreateWindow(640, 480, "Simple example", NULL, NULL);
  24. if(!window) {
  25. glfwTerminate();
  26. exit(EXIT_FAILURE);
  27. }
  28.  
  29. glfwMakeContextCurrent(window);
  30. glfwSwapInterval(1);
  31.  
  32. glfwSetKeyCallback(window, key_callback);
  33.  
  34. while(!glfwWindowShouldClose(window)) {
  35. glClear(GL_COLOR_BUFFER_BIT);
  36.  
  37. glfwSwapBuffers(window);
  38. glfwPollEvents();
  39. }
  40.  
  41. glfwDestroyWindow(window);
  42.  
  43. glfwTerminate();
  44. exit(EXIT_SUCCESS);
  45. }
  46.  

Espero que me puedan ayudar :P ¡Muchas gracias por su atención!


Título: Re: (Ayuda) Error en Visual Studio 2013 al enlazar con los binarios de GLFW
Publicado por: x64core en 13 Mayo 2015, 18:28 pm
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.


Título: Re: (Ayuda) Error en Visual Studio 2013 al enlazar con los binarios de GLFW
Publicado por: Seyro97 en 13 Mayo 2015, 18:58 pm
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!