Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 4 of 4

Thread: My first OpenGL program

  1. #1
    Junior Member Newbie
    Join Date
    Jun 2012
    Location
    Chandigarh, India
    Posts
    2

    Exclamation My first OpenGL program

    Hello,

    Please find below the code for my first simple OpenGL program, but it gives me the following error:

    g4b1e1@ubuntu:~/programming$ gcc -lGL -lglut cube.c -o cube
    /tmp/ccCQkTKm.o:cube.c:function display: error: undefined reference to 'gluLookAt'
    collect2: ld returned 1 exit status
    g4b1e1@ubuntu:~/programming$
    Program Code:
    #include <GL/glut.h>
    #include <GL/gl.h>
    #include <stdlib.h>

    void reshape(int, int);
    void display(void);
    void keyboard(unsigned char, int, int);


    int main(int argc, char** argv)
    {
    glutInit(&argc, argv);
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(500,500);
    glutInitWindowPosition (100, 100);
    glutCreateWindow(argv[0]);
    glClearColor(0.0,0.0,0.0,0.0);
    glShadeModel(GL_FLAT);
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
    return 0;
    }

    void reshape(int w, int h)
    {
    glViewport(0,0,(GLsizei) w, (GLsizei) h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-1.0,1.0,-1.0,1.0,1.5,20.0);
    glMatrixMode(GL_MODELVIEW);
    }

    void display(void)
    {
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0,1.0,1.0);

    glLoadIdentity();
    //glMatrixMode(GL_PROJECTION);
    gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0);
    glScalef(1.0,2.0,1.0);
    glutWireCube(1.0);
    glFlush();
    }

    void keyboard(unsigned char key, int x, int y)
    {
    switch(key) {
    case 27: exit(10);
    break;
    }
    }
    I tried to browse for the solution, but coludn't get it.

    Kindly guide.

  2. #2
    Junior Member Regular Contributor
    Join Date
    Aug 2009
    Location
    Poland
    Posts
    111
    Hello,
    add -lGLU to link against glu library:

    Code :
    gcc -o cube cube.c -lGL -lGLU -lglut

  3. #3
    Junior Member Newbie
    Join Date
    Jun 2012
    Location
    Chandigarh, India
    Posts
    2
    Thanks a ton KOWAL...
    It worked...

    Do we have a way to link the same permanently; instead of punching in it with the command everytime.

  4. #4
    Junior Member Regular Contributor
    Join Date
    Aug 2009
    Location
    Poland
    Posts
    111
    Yes, we have, it's called Makefile (or project settings if You use IDE)

    http://en.wikipedia.org/wiki/Makefile

    I use this for most of my small projects.
    Just copy-paste code below to file named 'Makefile' in your project directory,
    and adjust EXECUTABLE, HEADERS and OBJS variables to match your files.
    (By default I keep my source files in src directory, and headers in src/include)
    Change compiler flags in DEBUG_FLAGS and RELEASE_FLAGS as You wish.
    Add Your libs in LIBS variable, library dirctories in LIBDIRS (for example -L../lib),
    whenever You wish to compile program, type 'make' .

    Code :
    .PHONY: clean rebuild compressed doc
    VPATH = src src/include
     
    GPP    = g++
    GCC    = gcc
    LINK   = gcc
    DOCGEN = doxygen
     
    INCDIRS = -I./src/include
    LIBDIRS = 
    LIBS    = -lm -lGL -lGLU -lglut
     
    RELEASE_FLAGS = -Wall -O2 -flto
    DEBUG_FLAGS   = -Wall -O0 -g
     
    RELEASE_LINK_FLAGS = -flto
    DEBUG_LINK_FLAGS   = -g
     
    IFLAGS = $(INCDIRS)
    CFLAGS = $(IFLAGS) $(DEBUG_FLAGS) 
    LFLAGS = $(LIBS)   $(DEBUG_LINK_FLAGS)
    UPXFLAGS = --best --ultra-brute
     
    #----------------file utils---------------
    RM    = rm -rf
    CAT   = cat
    ECHO  = echo
    TAR   = tar
    GZIP  = gzip
    BZIP  = bzip2
    XZ    = xz
    STRIP = strip
    UPX   = upx
    #-----------------------------------------
     
     
    EXECUTABLE = cube
    OBJS       = cube.o
    HEADERS    = 
     
    all: $(EXECUTABLE)
     
    $(EXECUTABLE): $(OBJS)
    	$(LINK) -o $(EXECUTABLE) $(OBJS) $(LFLAGS)
     
    %.o : %.c $(HEADERS)
    	$(GCC) $(CFLAGS) -c -o $@ $<
     
    %.o : %.cpp $(HEADERS)
    	$(GPP) $(CFLAGS) -c -o $@ $<
     
    clean:
    	$(RM) $(EXECUTABLE) $(OBJS) *~ src/*~ src/include/*~
     
    rebuild: clean all
     
    compressed: all
    	$(UPX) $(UPXFLAGS) $(EXECUTABLE)
     
    doc:
    	$(DOCGEN)

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •