Ne peut pas compiler easy source en C++ et OpenGL (GLFW) sous Linux dans NetBeans

J'ai commencé à apprendre OpenGL (glfw) et j'ai copié source à partir d'un tutoriel et essayé de le compiler, mais des erreurs se sont produites. Je pense que j'ai installé directement tous les fichiers d'en-tête(glm, glfw, etc.)

Ceci est ma source (je n'ai pas utilisé ces caractères: dans les fichiers d'en-tête):

#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 GLEWn");
         return -1;
     }

     return 0;
 }

et voici la sortie 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)   

Merci de m'aider. Je vous remercie pour votre temps.

8
demandé sur lpapp 2014-04-19 19:28:40

2 réponses

tout d'Abord:

ceci est ma source (je n'ai pas utilisé ces caractères: <, > dans les fichiers d'en-tête.):

C'est mal, et vous devriez. Vos déclarations include actuelles sont fausses, et je suis en fait surpris comment il a passé le processus de compilation de cette façon.

Vous voyez des erreurs d'édition de liens ici:

/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'

Il y a peut être des options suivantes pour l'échec:

  • vous ne liez pas contre la bibliothèque (très probablement)

  • Vous n'êtes pas avoir de la bibliothèque installée (peu probable, en fonction de votre description)

  • vous utilisez des symboles qui ne sont pas présents dans la bibliothèque (encore une fois, peu probable)

la raison la plus probable est que vous ne liez pas contre la bibliothèque, éventuellement. Vous devez faire la démarche pour l'éditeur de liens:

-lglfw3

notez que vous devrez aussi ajouter tout ce qui est dans la chaîne cela se présente comme une dépendance lorsque vous commencez à les ajouter, donc sur la base de votre commentaire, c'est toute la chaîne à ajouter:

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

puisque vous utilisez L'IDE Netbeans, vous devrez aller dans les paramètres du projet pour le configurer à moins que vous ne modifiez les fichiers en arrière-plan manuellement. Ici, vous pouvez voir une capture d'écran qui démontre que vous avez un onglet linker où vous pouvez configurer tout cela correctement.

enter image description here

10
répondu lpapp 2014-04-19 19:17:17

- je le résoudre:

j'ai ajouté ces paramètres à linker:

-L/usr/local/lib -lglfw3 -pthread -lGLEW -lGLU -lGL -lrt -lXrandr -lXxf86vm -lXi -lXinerama -lX11
1
répondu Mr. Robot 2014-04-19 17:33:35