2012-06-30 44 views
5

tôi nhận được lỗi này khi cố gắng để làm cho thực thi, mã biên dịch một cách chính xác và chưa khi tôi nhấn lệnh make tôi nhận được thông báo lỗi này:tài liệu tham khảo không xác định cho `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 

Tôi chạy Linux Mint 13 và tôi nghĩ rằng nó là cái gì để làm với makefile của tôi, tôi không biết quá nhiều về họ vì vậy tôi bị hack một với nhau và tìm thấy một số mã trực tuyến:

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 

mã của tôi:

#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 cho dòng này: gcc -o hello-gl helloworld.o -L/usr/X11R6/lib -lGL -lglut -lGLEW -lm Đã giúp tôi :) – rendon

+0

@DDC Tôi rất vui vì makefile đã giúp bạn :) – TheBlueCat

Trả lời

4

Tên cho các hàm GLEW sẽ bắt đầu từ 'glew', không phải 'Glew'.

Vì vậy, nó là

GlewInitResult = glewInit(); 

C là trường hợp nhạy cảm và tất cả các libs OpenGL liên quan đến thường bắt đầu tên của các chức năng với chữ thường.

+0

Cảm ơn bạn! Tôi phải làm một lỗi đánh máy. – TheBlueCat

Các vấn đề liên quan