2012-06-30 10 views
5

ich diese Fehlermeldung erhalten, wenn sie versuchen die ausführbare Datei zu machen, kompiliert der Code korrekt und doch, wenn ich den Befehl make schlug ich diese Fehlermeldung:undefined reference to `GlewInit‘ - OpenGL

gcc -c helloworld.c 
[email protected] ~/Desktop/Dev/gl $ make 
gcc -o hello-gl helloworld.o -L/usr/X11R6/lib -lGL -lglut -lGLEW -lm 
helloworld.o: In function `Initialize': 
helloworld.c:(.text+0x55): undefined reference to `GlewInit' 
collect2: ld returned 1 exit status 
make: *** [helloworld] Error 1 

Ich bin 13 Linux Mint laufen und ich denke, es ist etwas mit meinem Make-Datei zu tun, ich weiß nicht zu viel über sie wissen so gehackt ich ein zusammen und einige Code online gefunden:

GL_INCLUDE = /usr/X11R6/include 
GL_LIB = /usr/X11R6/lib 
GL_GLEW = /user/include 

helloworld: helloworld.o 
    gcc -o hello-gl $^ -L$(GL_LIB) -lGL -lglut -lGLEW -lm 

.c.o: 
    gcc -c -o [email protected] $< -I$(GL_INCLUDE) 

clean: 
    rm -f hello-gl hello-gl-dummy hello-gl.o util.o hello-gl-dummy.o 

Mein Code:

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <GL/glew.h> 
#include <GL/freeglut.h> 
#define WINDOW_TITLE_PREFIX "Hello, World!" 

int CurrentWidth = 600, 
    CurrentHeight = 400, 
    WindowHandle = 0; 

void Initialize(int, char*[]); 
void InitWindow(int, char*[]); 
void ResizeFunction(int, int); 
void RenderFunction(void); 

int main(int argc, char* argv[]) 
{ 
    Initialize(argc, argv); 

    glutMainLoop(); 

    exit(EXIT_SUCCESS); 
     return 0; 
} 

void Initialize(int argc, char* argv[]) 
{ 
    GLenum GlewInitResult; 
    InitWindow(argc, argv); 
     GlewInitResult = GlewInit(); 
     if (GLEW_OK != GlewInitResult) { 
      fprintf(stderr, "ERROR: %s\n", glewGetErrorString(GlewInitResult)); 
      exit(EXIT_FAILURE); 
     } 

    fprintf(
     stdout, 
     "INFO: OpenGL Version: %s\n", 
     glGetString(GL_VERSION) 
    ); 

    glClearColor(0.2f, 1.0f, 0.8f, 0.3f); 
} 

void InitWindow(int argc, char* argv[]) 
{ 
    glutInit(&argc, argv); 

    glutInitContextVersion(4, 0); 
    glutInitContextFlags(GLUT_FORWARD_COMPATIBLE); 
    glutInitContextProfile(GLUT_CORE_PROFILE); 

    glutSetOption(
     GLUT_ACTION_ON_WINDOW_CLOSE, 
     GLUT_ACTION_GLUTMAINLOOP_RETURNS 
    ); 

    glutInitWindowSize(CurrentWidth, CurrentHeight); 

    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); 

     char *states[] = {"Hello", "My", "Name", "Is", "Lewis"}; 

    WindowHandle = glutCreateWindow(WINDOW_TITLE_PREFIX); 

    if(WindowHandle < 1) { 
     fprintf(
      stderr, 
      "KERN_ERROR: Could not create a new rendering window.\n" 
     ); 
     exit(EXIT_FAILURE); 
    } 

    glutReshapeFunc(ResizeFunction); 
    glutDisplayFunc(RenderFunction); 
} 

void ResizeFunction(int Width, int Height) 

    { 
     /*captures the resize data from the OS and assigns it to the global 
     variable CURRENT_WIDTH & CURRENT_HEIGHT */ 

    CurrentWidth = Width; 
    CurrentHeight = Height; 
    glViewport(0, 0, CurrentWidth, CurrentHeight); 
} 

void RenderFunction(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    /*the next line takes the data from the back-buffer to the screen */ 

    glutSwapBuffers(); 
    glutPostRedisplay(); 
} 
+2

+1 für diese Zeile: gcc -o hallo-gl helloworld.o -L/usr/X11R6/lib -lGL -lglut -lGLEW -lm Es hat mir geholfen :) – rendon

+0

@DDC Ich bin froh, dass das Makefile Ihnen geholfen hat :) – TheBlueCat

Antwort

4

Die Namen für die GLEW-Funktionen sollten von 'glew', nicht 'Glew' beginnen.

So ist es

GlewInitResult = glewInit(); 

C ist Groß- und Kleinschreibung alle OpenGL-bezogenen Libs in der Regel die Namen der Funktionen mit Kleinbuchstaben beginnen.

+0

Danke! Ich muss einen Tippfehler gemacht haben. – TheBlueCat

Verwandte Themen