2014-04-19 13 views
8

Ho iniziato a imparare OpenGL (glfw) e ho copiato il codice sorgente da un tutorial e ho provato a compilarlo, ma si sono verificati degli errori. Credo di aver corectly installato tutti i file di intestazione (glm, glfw etc.)Impossibile compilare la fonte semplice in C++ e OpenGL (GLFW) in Linux in NetBeans

Questa è la mia fonte (non ho usato questi caratteri: <,> nei file di intestazione):

#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; 
} 

e questo è l'output in 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) 

Please help me. Grazie per il tuo tempo.

+0

Non si collega contro di essa? – lpapp

+0

Notate le voci "riferimento non definito" sopra elencate. Questi devono essere risolti. – STLDeveloper

+0

Come posso risolvere? –

risposta

10

Per prima cosa:

questa è la mia fonte (non ho usato questi caratteri: <,> nei file header.):

che è sbagliato, e si dovrebbe. Le tue attuali istruzioni di inclusione sono sbagliate, e sono davvero sorpreso di come abbia passato il processo di compilazione in questo modo.

Stai visualizzando errori di linker qui:

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

Ci potrebbero essere le seguenti opzioni per il fallimento:

  • Non si collega alla libreria (più probabile)

  • Non si sta installando la libreria (improbabile, in base alla descrizione)

  • Si utilizza simboli non presenti nella libreria (di nuovo, improbabile)

Il più probabilmente ragione è che non si sta collegando alla libreria, alla fine. Si dovrebbe avere questo set up per il linker:

-lglfw3 

noti che si dovrà anche aggiungere tutto nella catena che viene in su come dipendenza quando si inizia ad aggiungere questi, quindi, sulla base di commento questa è tutta catena di aggiungere:

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

Dal momento che si sta utilizzando l'IDE Netbeans, è necessario andare alle impostazioni di progetto per configurarlo a meno che non si modificano i file in background manualmente. Qui, puoi vedere uno screenshot che dimostra che hai una scheda del linker in cui puoi configurare tutto questo correttamente.

enter image description here

+0

Ho aggiunto i parametri al linker ma gli errori si sono verificati di nuovo ma meno di prima. https://docs.google.com/file/d/0B_1o37MpTnYUTUY0SXhjSDQ4SE0/edit –

+0

Conosci il processo equivalente su Code :: Blocks? – 0x499602D2

+0

Forse un po ' –

1

risolvo che:

ho aggiunto questi parametri linker:

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

Non è necessario inserire di nuovo una risposta, quando ce n'è già una . Inoltre, seleziona una risposta come http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – lpapp

Problemi correlati