[perhaps a little bit off] strange linking problem with SDL and OpenGL

Hi people,

I want to compile an app which uses SDL and OpenGL. When I want to
compile via make and get the follwing strange error… I really don’t
know any further…cSouse_Input uses the keyboard functions of SDL… sorry, if this is much too off-topic.

cSouse_Input.o: In function
__malloc_alloc_template<0>::_S_oom_malloc(unsigned int)': cSouse_Input.o(.__malloc_alloc_template<0>::gnu.linkonce.t._S_oom_malloc(unsigned int)+0x19): undefined reference toendl(ostream &)'
cSouse_Input.o(.__malloc_alloc_template<0>::gnu.linkonce.t._S_oom_malloc(unsigned
int)+0x26): undefined reference to cerr' cSouse_Input.o(.__malloc_alloc_template<0>::gnu.linkonce.t._S_oom_malloc(unsigned int)+0x2b): undefined reference toostream::operator<<(char const )'
cSouse_Input.o(.__malloc_alloc_template<0>::gnu.linkonce.t._S_oom_malloc(unsigned
int)+0x36): undefined reference to `ostream::operator<<(ostream
&(
)(ostream &))'
collect2: ld returned 1 exit status

Here’s the cSouse_Input Header-File:

//////////////////////////////////////////////////////////////////////////////////////
#ifndef CSOUSE_KEYBOARD_H
#define CSOUSE_KEYBOARD_H

#include <SDL/SDL.h>
#include

using namespace std;

/*****************************************************
struct which holds key information
*****************************************************/
typedef struct sKeyEvent
{
SDLKey key;
int pressed;
} KeyEvent;

typedef list LISTKEYEVENTS;

class cSouse_Input
{
public:
cSouse_Input();
~cSouse_Input();

    static  cSouse_Input*   getInstance();
    static  void                            delInstance();

    void                                            update();
    KeyEvent*                               getkey(SDLKey searchkey);
    int                                             getmousex();
    int                                             getmousey();
    int                                             getmousepressed();
    char*                                   getlastkey();

private:
void addkey(SDLKey key,int pressed);

    static cSouse_Input             *instance;

    LISTKEYEVENTS                   lKeyEvents;

    int                                             mousex,mousey;
    int                                             mouse_pressed;
    char                                    clastkey[10];

};
#endif

//////////////////////////////////////////////////////////////////////////////////////

Here’s also the makefile… I hope someone knows what’s getting wrong:#######################################################################################################

SOUSE Technology Demo makefile

#######################################################################################################
all: souse

souse: main.o cSouse_System.o cSouse_TexMan.o cSouse_Input.o
cSouse_Camera.o
cSouse_RenderSys.o cSouse_Util.o cSouse_Model.o cSouse_BaseEntity.o
cSouse_RenderSys_ModelModul.o GLFont.o cSouse_IDCounter.o
cSouse_ModelEntity.o
ImageGL.o Error.o ImageTarga.o Utility.o

            gcc main.o cSouse_System.o cSouse_TexMan.o cSouse_Input.o

cSouse_Camera.o
cSouse_RenderSys.o cSouse_Util.o cSouse_Model.o cSouse_BaseEntity.o
cSouse_RenderSys_ModelModul.o GLFont.o cSouse_IDCounter.o
cSouse_ModelEntity.o
ImageGL.o Error.o ImageTarga.o Utility.o
-o ./bin/test -lpthread -lSDL -lSDL_image -lGL -lGLU -L/usr/lib
-L/usr/X11R6/lib

main.o: ./souse/main.cpp
gcc -c ./souse/main.cpp

#################
#####Systemklasse
cSouse_System.o: ./souse/cSouse_System.h ./souse/cSouse_System.cpp
g++ -c ./souse/cSouse_System.cpp

#################
#####TexturManager
cSouse_TexMan.o: ./souse/cSouse_TexMan.h ./souse/cSouse_TexMan.cpp
g++ -c ./souse/cSouse_TexMan.cpp

#################
#####Inputklasse
cSouse_Input.o: ./souse/cSouse_Input.h ./souse/cSouse_Input.cpp
g++ -c ./souse/cSouse_Input.cpp

#################
#####Kameraklasse
cSouse_Camera.o: ./souse/cSouse_Camera.h ./souse/cSouse_Camera.cpp
g++ -c ./souse/cSouse_Camera.cpp

#################
#####RenderSystem
cSouse_RenderSys.o: ./souse/cSouse_RenderSys.h
./souse/cSouse_RenderSys.cpp
g++ -c ./souse/cSouse_RenderSys.cpp

#################
#####UtilityKlasse
cSouse_Util.o: ./souse/cSouse_Util.h ./souse/cSouse_Util.cpp
g++ -c ./souse/cSouse_Util.cpp

#################
#####ModelKlasse
cSouse_Model.o: ./souse/cSouse_Model.h ./souse/cSouse_Model.cpp
g++ -c ./souse/cSouse_Model.cpp

#################
#####BasisEntity
cSouse_BaseEntity.o: ./souse/cSouse_BaseEntity.h
./souse/cSouse_BaseEntity.cpp
g++ -c ./souse/cSouse_BaseEntity.cpp

#################
#####RenderSys ModelModul
cSouse_RenderSys_ModelModul.o: ./souse/cSouse_RenderSys_ModelModul.h
./souse/cSouse_RenderSys_ModelModul.cpp
g++ -c ./souse/cSouse_RenderSys_ModelModul.cpp

#################
#####GLFont
GLFont.o: ./souse/GLFont.cpp ./souse/GLFont.cpp
g++ -c ./souse/GLFont.cpp

#################
#####ID Counter
cSouse_IDCounter.o: ./souse/cSouse_IDCounter.h
./souse/cSouse_IDCounter.cpp
g++ -c ./souse/cSouse_IDCounter.cpp

#################
#####ModelEntity
cSouse_ModelEntity.o: ./souse/cSouse_ModelEntity.h
./souse/cSouse_ModelEntity.cpp
g++ -c ./souse/cSouse_ModelEntity.cpp

#################
#####ImageGL
ImageGL.o: ./souse/ImageGL.h ./souse/ImageGL.h ./souse/ImageGL.cpp
g++ -c ./souse/ImageGL.cpp

#################
#####Error
Error.o: ./souse/Error.h ./souse/Error.h
g++ -c ./souse/Error.cpp

#################
#####ImageTarga
ImageTarga.o: ./souse/ImageTarga.h ./souse/ImageTarga.cpp
g++ -c ./souse/ImageTarga.cpp

#################
#####Utility
Utility.o: ./souse/Utility.h ./souse/Utility.cpp
g++ -c ./souse/Utility.cpp

Sorry for this very long mail but I really need help.

Bye,


Alexander Bierbrauer

Coder & Coordinator of polyfrag
eMail: @Alexander_Bierbrauer
Web: http://www.polyfrag.com

~v^[running Linux Mandrake 8.1]^v~

Alexander Bierbrauer wrote:

Hi people,

I want to compile an app which uses SDL and OpenGL. When I want to
compile via make and get the follwing strange error… I really don’t
know any further…cSouse_Input uses the keyboard functions of SDL… sorry, if this is much too off-topic.

cSouse_Input.o: In function
__malloc_alloc_template<0>::_S_oom_malloc(unsigned int)': cSouse_Input.o(.__malloc_alloc_template<0>::gnu.linkonce.t._S_oom_malloc(unsigned int)+0x19): undefined reference toendl(ostream &)’

are you using gcc instead off g++ (not sure at all …) ?

Alexander Bierbrauer wrote:

main.o: ./souse/main.cpp
gcc -c ./souse/main.cpp

switching gcc to g++ works…–
-==-
Jon Atkins
http://jonatkins.org/

Am Donnerstag, 10. Januar 2002 14:46 schrieben Sie:

Alexander Bierbrauer wrote:

main.o: ./souse/main.cpp
gcc -c ./souse/main.cpp

switching gcc to g++ works…

The reason for this is that g++ automatically links the C++ std library. If
you added -lstdc++ (I think - not sure about the library name) to the command
line in the Makefile, it should work as well - though there may be other
problems (I don’t know whether the CRT initialization used by gcc initializes
global instance properly, for example).

cu,
Prefect

Jonathan Atkins wrote:

main.o: ./souse/main.cpp
gcc -c ./souse/main.cpp

switching gcc to g++ works…

what difference would that make in this case? note the -c