1

I'm trying to compile my first program openGL app.

This is my code:

#include <GL/gl.h>      
#include <GL/glu.h>     
#include <GL/glut.h>    

using namespace std;

int main(int argc, char** argv) {

    glutInit(&argc, argv);

    return 0;
}

I have then linked /usr/lib/libglut.a to the project.

When I try to compile I'm getting this error:

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/home/tirengarfio/programacion/3Ded'
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux-x86/3ded
make[2]: Entering directory `/home/tirengarfio/programacion/3Ded'
mkdir -p build/Debug/GNU-Linux-x86
rm -f build/Debug/GNU-Linux-x86/main.o.d
g++    -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.cpp
mkdir -p dist/Debug/GNU-Linux-x86
g++     -o dist/Debug/GNU-Linux-x86/3ded build/Debug/GNU-Linux-x86/main.o /usr/lib/libglut.a 
/usr/lib/libglut.a(libglut_la-freeglut_init.o): In function `fghGetWindowProperty':
/usr/lib/libglut.a(libglut_la-freeglut_init.o): In function `fghGetAtom':
/usr/lib/libglut.a(libglut_la-freeglut_init.o): In function `glutInit':
/usr/lib/libglut.a(libglut_la-freeglut_init.o): In function `glutInit':
/usr/lib/libglut.a(libglut_la-freeglut_init.o): In function `glutInit':
/usr/lib/libglut.a(libglut_la-freeglut_init.o): In function `glutInit':
/usr/lib/libglut.a(libglut_la-freeglut_init.o): In function `glutInit':
/usr/lib/libglut.a(libglut_la-freeglut_init.o): In function `glutInit':
/usr/lib/libglut.a(libglut_la-freeglut_init.o): In function `glutInit':
/usr/lib/libglut.a(libglut_la-freeglut_init.o): In function `glutInit':
/usr/lib/libglut.a(libglut_la-freeglut_init.o): In function `glutInit':
/usr/lib/libglut.a(libglut_la-freeglut_init.o): In function `fgDeinitialize':
/usr/lib/libglut.a(libglut_la-freeglut_init.o): In function `fgDeinitialize':
/usr/lib/libglut.a(libglut_la-freeglut_init.o): In function `fgDeinitialize':
/usr/lib/libglut.a(libglut_la-freeglut_main.o): In function `fghcbDisplayWindow':
/usr/lib/libglut.a(libglut_la-freeglut_main.o): In function `fghcbDisplayWindow':
/usr/lib/libglut.a(libglut_la-freeglut_main.o): In function `fghcbDisplayWindow':
/usr/lib/libglut.a(libglut_la-freeglut_main.o): In function `glutMainLoopEvent':
/usr/lib/libglut.a(libglut_la-freeglut_main.o): In function `glutMainLoopEvent':
/usr/lib/libglut.a(libglut_la-freeglut_main.o): In function `glutMainLoopEvent':
/usr/lib/libglut.a(libglut_la-freeglut_main.o): In function `glutMainLoopEvent':
/usr/lib/libglut.a(libglut_la-freeglut_main.o): In function `glutMainLoopEvent':
/usr/lib/libglut.a(libglut_la-freeglut_main.o): In function `glutMainLoopEvent':
/usr/lib/libglut.a(libglut_la-freeglut_main.o): In function `glutMainLoop':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fghGetVMaxExtent':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o):(.text+0xf93): more undefined references to `glVertex2i' follow
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
make[2]: Leaving directory `/home/tirengarfio/programacion/3Ded'
make[1]: Leaving directory `/home/tirengarfio/programacion/3Ded'
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o):(.text+0x1043): more undefined references to `glVertex2i' follow
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
/usr/lib/libglut.a(libglut_la-freeglut_state.o): In function `fghGetConfig':
/usr/lib/libglut.a(libglut_la-freeglut_state.o): In function `glutGetModeValues':
/usr/lib/libglut.a(libglut_la-freeglut_state.o): In function `glutGetModeValues':
/usr/lib/libglut.a(libglut_la-freeglut_state.o): In function `glutGetModeValues':
/usr/lib/libglut.a(libglut_la-freeglut_state.o): In function `glutDeviceGet':
/usr/lib/libglut.a(libglut_la-freeglut_state.o): In function `glutGet':
/usr/lib/libglut.a(libglut_la-freeglut_state.o): In function `glutGet':
/usr/lib/libglut.a(libglut_la-freeglut_state.o): In function `glutGet':
/usr/lib/libglut.a(libglut_la-freeglut_state.o): In function `glutGet':
/usr/lib/libglut.a(libglut_la-freeglut_state.o): In function `glutGet':
/usr/lib/libglut.a(libglut_la-freeglut_state.o): In function `glutGet':
/usr/lib/libglut.a(libglut_la-freeglut_state.o): In function `glutGet':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `toggle_fullscreen':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `toggle_fullscreen':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `toggle_fullscreen':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `glutPopWindow':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `glutPushWindow':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `glutPositionWindow':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `glutSetIconTitle':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `glutSetIconTitle':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `glutSetWindowTitle':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `glutSetWindowTitle':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `glutIconifyWindow':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `glutIconifyWindow':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `glutHideWindow':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `glutHideWindow':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `glutHideWindow':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `glutShowWindow':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `glutShowWindow':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `fgCloseWindow':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `fgCloseWindow':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `fgCloseWindow':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `fghCreateNewContext':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `fgSetWindow':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `fgChooseFBConfig':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `fgChooseFBConfig':
/usr/lib/libglut.a(libglut_la-freeglut_window.o): In function `fgChooseFBConfig':
...
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-Linux-x86/3ded] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 1s)

Any idea?

Ubuntu 10.04/Netbeans 6.9.1

genpfault
  • 51,148
  • 11
  • 85
  • 139
tirenweb
  • 30,963
  • 73
  • 183
  • 303

2 Answers2

3

The clue is here: more undefined references to 'glVertex2i' follow

Basically you need to link against the OpenGL library as well (glVertex2i is an OpenGL function), glut doesn't provide OpenGL functions, only additional functions to make life easy.

Try adding -lGL to the command line (at the end).

EDIT: This is only true for the static version (/usr/lib/libglut.a). The shared object version knows how to find libGL, so you can simply use -lglut instead of /usr/lib/libglut.a.

Omri Barel
  • 9,182
  • 3
  • 29
  • 22
2

Assuming you have all the shared libraries installed on your system, for a C source code:

gcc hello.c -o hello -lGL -lglut -lGLU

For a C++ code:

g++ hello.cpp -o hello -lGL -lglut -lGLU

Don't use the static libraries files.a if you really don't need to. Else you'll have to satisfy those dependencies on your own.

karlphillip
  • 92,053
  • 36
  • 243
  • 426