LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (http://www.linuxquestions.org/questions/programming-9/)
-   -   undefined references when compiling PLIB program (http://www.linuxquestions.org/questions/programming-9/undefined-references-when-compiling-plib-program-566116/)

Alkibiades 07-02-2007 03:05 PM

undefined references when compiling PLIB program
 
Hello all,

I have some problems when I try to compile programs wherein I use the PLIB (http://plib.sourceforge.net/index.html). So I tried to compile one of the sample programs that go with it, and I get the same undefined reference errors. Am I specifying the wrong compiler options? This is what happens:

Quote:

$ g++ -g -Wall -I/usr/include -L/usr/lib -lglut -lGL -lGLU -L/usr/X11/lib -lX11 -lXext -lXmu -lm -L/usr/lib -lplibpu -lplibfnt -lplibsg -lplibul -o simple simple.cxx
/tmp/cccdQIhC.o: In function `displayfn()':
/home/jp/downloads/plib_examples-1.8.4/src/pui/simple.cxx:66: undefined reference to `puDisplay()'
/tmp/cccdQIhC.o: In function `mousefn(int, int, int, int)':
/home/jp/downloads/plib_examples-1.8.4/src/pui/simple.cxx:57: undefined reference to `puMouse(int, int, int, int)'
/tmp/cccdQIhC.o: In function `motionfn(int, int)':
/home/jp/downloads/plib_examples-1.8.4/src/pui/simple.cxx:51: undefined reference to `puMouse(int, int)'
/tmp/cccdQIhC.o: In function `puInitGLUT()':
/usr/include/plib/puGLUT.h:66: undefined reference to `puSetWindowFuncs(int (*)(), void (*)(int), void (*)(int*, int*), void (*)(int, int))'
/usr/include/plib/puGLUT.h:67: undefined reference to `puRealInit()'
/tmp/cccdQIhC.o: In function `puButton':
/usr/include/plib/pu.h:1031: undefined reference to `puObject::puObject(int, int, int, int)'
/usr/include/plib/pu.h:1031: undefined reference to `vtable for puButton'
/tmp/cccdQIhC.o: In function `puOneShot':
/usr/include/plib/pu.h:1053: undefined reference to `vtable for puOneShot'
/tmp/cccdQIhC.o: In function `puObject::setLegend(char const*)':
/usr/include/plib/pu.h:721: undefined reference to `puPostRefresh()'
collect2: ld returned 1 exit status
The source code of the sample program is:


Quote:

/*
PLIB - A Suite of Portable Game Libraries
Copyright (C) 2001 Steve Baker

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

For further information visit http://plib.sourceforge.net

$Id: simple.cxx,v 1.11 2002/09/01 12:04:51 ude Exp $
*/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef WIN32
# include <windows.h>
#else
# include <unistd.h>
#endif
#include <math.h>

#ifdef FREEGLUT_IS_PRESENT
# include <GL/freeglut.h>
#else
# ifdef __APPLE__
# include <GLUT/glut.h>
# else
# include <GL/glut.h>
# endif
#endif

#include <plib/pu.h>

//#define VOODOO 1

void motionfn ( int x, int y )
{
puMouse ( x, y ) ;
glutPostRedisplay () ;
}

void mousefn ( int button, int updown, int x, int y )
{
puMouse ( button, updown, x, y ) ;
glutPostRedisplay () ;
}

void displayfn ( void )
{
glClearColor ( 0.1f, 0.4f, 0.1f, 1.0f ) ;
glClear ( GL_COLOR_BUFFER_BIT ) ;

puDisplay () ;

glutSwapBuffers () ;

/* The next line is not neccessary - you could remove it safely without
affecting the functionality of this simple example program.

It exists because in every application which does some more stuff
than creating user interface widgets, you normally do want to
redraw your scenery as often as possible for smooth animation. */

glutPostRedisplay () ;
}

void button_cb ( puObject * )
{
fprintf ( stderr, "Hello World.\n" ) ;
}


int main ( int argc, char **argv )
{
#ifdef VOODOO
glutInitWindowPosition ( 0, 0 ) ;
#endif
glutInitWindowSize ( 640, 480 ) ;
glutInit ( &argc, argv ) ;

/* Note that in order for PUI and this example program to work, you
definitely don't need a depth buffer.

However, most applications using PUI do some more things than rendering
PUI widgets. In every "real" program, you usually do need a depth
buffer - we are requesting one in the next line so that PLIB programmers
can write their applications upon this example code without running
into problems. */

glutInitDisplayMode ( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ) ;

glutCreateWindow ( "PUI Application" ) ;
glutDisplayFunc ( displayfn ) ;
glutMouseFunc ( mousefn ) ;
glutMotionFunc ( motionfn ) ;

#ifdef VOODOO
glutPassiveMotionFunc ( motionfn ) ;
#endif

puInit () ;

#ifdef VOODOO
puShowCursor () ;
#endif

puOneShot *b = new puOneShot ( 50, 50, 200, 80 ) ;

b -> setLegend ( "Say Hello" ) ;
b -> setCallback ( button_cb ) ;

printf ( "%d\n", PLIB_VERSION ) ;

glutMainLoop () ;

return 0 ;
}
Someone who knows what I'm doing wrong?

Thanks in advance,
yours, Alkibiades

ta0kira 07-03-2007 07:06 AM

Looks like another library or object needs to be linked in. Rather than frustrate yourself, this is a problem best solved by the project administrator. You should post this question on their help board or email them directly. I'd suggest to them that they provide a makefile with the source code.
ta0kira

Alkibiades 07-04-2007 02:32 AM

Thanks, but that was not the problem. It turned out I specified the libraries in the wrong order.

Thanks,
yours, Co

OmarOthman 03-13-2010 02:18 PM

Quote:

Originally Posted by Alkibiades (Post 2810054)
Thanks, but that was not the problem. It turned out I specified the libraries in the wrong order.

I think it's more useful on your behalf to specify the correct order, at least for other people to benefit from the post!


All times are GMT -5. The time now is 09:47 PM.