No se puede comstackr fuente sencilla en C ++ y OpenGL (GLFW) en Linux en NetBeans

Empecé a aprender OpenGL (glfw) y copié el código fuente de un tutorial e intenté comstackrlo, pero ocurrieron errores. Creo que he instalado corectly todos los archivos de encabezado (glm, glfw, etc.)

Esta es mi fuente (no usé estos caracteres: en archivos de encabezado):

#include iostream #include stdio.h #include stdlib.h #include GL/glew.h #include GLFW/glfw3.h #include glm/glm.hpp #define GLFW_INCLUDE_GL_3 using namespace glm; using namespace std; int main(){ if(!glfwInit()){ return -1; } GLFWwindow* window; // (In the accompanying source code, this variable is global) window = glfwCreateWindow( 1024, 768, "Tutorial 01", NULL, NULL); if( window == NULL ) { fprintf( stderr, "Failed to open GLFW window. If you have an Intel GPU, they are not 3.3 compatible. Try the 2.1 version of the tutorials.\n" ); glfwTerminate(); return -1; } glfwMakeContextCurrent(window); // Initialize GLEW glewExperimental=true; // Needed in core profile if (glewInit() != GLEW_OK) { fprintf(stderr, "Failed to initialize GLEW\n"); return -1; } return 0; } 

y esta es la salida en NetBeans:

 "/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf make[1]: Entering directory `/home/jan/NetBeansProjects/a' "/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux-x86/a make[2]: Entering directory `/home/jan/NetBeansProjects/a' mkdir -p dist/Debug/GNU-Linux-x86 g++ -o dist/Debug/GNU-Linux-x86/a build/Debug/GNU-Linux-x86/main.o build/Debug/GNU-Linux-x86/main.o: In function `main': /home/jan/NetBeansProjects/a/main.cpp:12: undefined reference to `glfwInit' /home/jan/NetBeansProjects/a/main.cpp:16: undefined reference to `glfwCreateWindow' /home/jan/NetBeansProjects/a/main.cpp:19: undefined reference to `glfwTerminate' /home/jan/NetBeansProjects/a/main.cpp:22: undefined reference to `glfwMakeContextCurrent' /home/jan/NetBeansProjects/a/main.cpp:25: undefined reference to `glewExperimental' /home/jan/NetBeansProjects/a/main.cpp:26: undefined reference to `glewInit' collect2: error: ld returned 1 exit status make[2]: *** [dist/Debug/GNU-Linux-x86/a] Error 1 make[2]: Leaving directory `/home/jan/NetBeansProjects/a' make[1]: *** [.build-conf] Error 2 make[1]: Leaving directory `/home/jan/NetBeansProjects/a' make: *** [.build-impl] Error 2 BUILD FAILED (exit value 2, total time: 462ms) 

Por favor, ayúdame. Gracias por tu tiempo.

Lo primero es lo primero:

esta es mi fuente (no usé estos caracteres: <,> en archivos de encabezado):

Eso está mal, y deberías. Sus instrucciones de inclusión actuales son incorrectas, y estoy realmente sorprendido de cómo pasó el proceso de comstackción de esta manera.

Usted está viendo errores del enlazador aquí:

 /home/jan/NetBeansProjects/a/main.cpp:12: undefined reference to `glfwInit' /home/jan/NetBeansProjects/a/main.cpp:16: undefined reference to `glfwCreateWindow' /home/jan/NetBeansProjects/a/main.cpp:19: undefined reference to `glfwTerminate' /home/jan/NetBeansProjects/a/main.cpp:22: undefined reference to `glfwMakeContextCurrent' /home/jan/NetBeansProjects/a/main.cpp:25: undefined reference to `glewExperimental' /home/jan/NetBeansProjects/a/main.cpp:26: undefined reference to `glewInit' 

Puede haber las siguientes opciones para la falla:

  • No estás vinculando contra la biblioteca (lo más probable)

  • No tiene la biblioteca instalada (improbable, según su descripción)

  • Está utilizando símbolos que no están presentes en la biblioteca (de nuevo, poco probable)

La razón más probable es que, finalmente, no estés vinculando a la biblioteca. Deberías tener esta configuración para el enlazador:

 -lglfw3 

Tenga en cuenta que también necesitará agregar todo lo que aparece en la cadena como una dependencia cuando comience a agregarlos, de modo que según su comentario, esta es toda la cadena para agregar:

 -L/usr/local/lib -lglfw3 -pthread -lGLEW -lGLU -lGL -lrt -lXrandr -lXxf86vm -lXi -lXinetwig -lX11 

Como está utilizando Netbeans IDE, deberá ir a la configuración del proyecto para configurarlo, a menos que edite los archivos en segundo plano de forma manual. Aquí puede ver una captura de pantalla que demuestra que tiene una pestaña de enlazador donde puede configurar todo esto correctamente.

enter image description here

Lo resuelvo

Agregué estos parámetros al enlazador:

 -L/usr/local/lib -lglfw3 -pthread -lGLEW -lGLU -lGL -lrt -lXrandr -lXxf86vm -lXi -lXinetwig -lX11