PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Überladen von Methoden aus Bibliotheken



SegFault II.
09-02-2002, 16:15
Hallo @ alle!

Kann mir jemand sagen, ob ich etwas bestimmtes beachten muss, wenn ich Methoden aus einer Klasse aus einer Bibliothek überladen möchte?

Ich habe da nämlich einige Probleme beim Linken des neuen Programms...

Die Bibliothek ist selbst geschrieben, und enthält unter anderem (in Kurzform):

class oSDL_Keyboard{
public:
/* snip */
virtual void pressed(SDL_KeyboardEvent event);
/* snip */
};

void oSDL_Keyboard::pressed(SDL_KeyboardEvent event){
/* snip */
}


Das Programm, das diese Bibliothek benutzen soll enthält folgendes:

class tas : public oSDL_Keyboard{
public:
/* snip */
virtual void pressed(SDL_KeyboardEvent event);
/* snip */
};

tas::pressed(SDL_KeyboardEvent event){
/* snip */
}


Wenn ich jetzt versuche das ganze zu compilieren, gibt es keine Probleme.
Aber sobald ich auch den Linker anwerfe, bekomme ich diese Meldungen:

/home/chrnit/devel/ost.cpp(.gnu.linkonce.t.__tf3tas+0x10): undefined reference to
`oSDL_Keyboard type_info function'
/home/chrnit/devel/ost.cpp(.gnu.linkonce.t.__tf3tas+0x1a): undefined reference to
`oSDL_Keyboard type_info node'

Ich rufe den Compiler/Linker mit
gcc -g3 ost.cpp -fexceptions -I/usr/include/SDL -I/usr/include/oSDL -lSDL -loSDL
auf. Das linken gegen die Bibliotheken klappt auch problemlos, wenn ich "class tas" usw. herauslasse.

Dieser Fehler tritt mit jeder von mir getesteten Methode/Klasse der Bibliothek oSDL auf, mit der ich es bereits versucht habe (einige).

Und das seltsame ist:
Wenn ich in dem Projekt, zu dem oSDL gehört, eine cpp-datei einfüge, die zu einer ausführbaren Datei compiliert/gelinkt wird und dort eine Methode überlade, gibt es keinerlei Probleme.

Zu weiteren Tests habe ich die Bibliothek im Borland C++ Builder unter Win95 compiliert und dort einen ähnlichen Code wie oben beschrieben in ein seperates Projekt eingefügt.
Auch hier ließ sich das Programm compilieren und linken.

Demnach tritt der Fehler nur auf, wenn ich die Methode der Bibliothek in einem seperaten Projekt (es reicht auch eine einzelne cpp-Datei) überladen und anschließend unter Linux mit dem gcc compilieren/linken möchte.

Ich verwende den gcc 2.95.3 und als Entwicklungsumgebung KDevelop 2.0.1.

Ich hoffe, die Informationen sind ausreichend umfangreich ;-), so dass man mir vielleicht doch noch helfen kann.

Das beste hoffend
SegFault II.

thommy
13-02-2002, 10:49
Vertausche einmal die Linkreihenfolge in: -loSDL -lSDL.

Thomas

SegFault II.
15-02-2002, 17:29
Nein, leider kommt immer noch die selbe Fehlermeldung

anda_skoa
26-02-2002, 15:14
Die Datei /usr/lib/liboSDL.so gibt es schon, oder?

Manchmal liegt eine zusätzliche Bibliothek ja nicht im Standard Libverzeichnis, dann braucht man wie bei Includes eine Pfadangabe zB -L/usr/local/lib, wenn die lib in /usr/local/lib ist.

Ciao,
_

SegFault II.
02-03-2002, 12:02
Ja, die hab ich selbst geschrieben und liegt in /usr/lib.
Außerdem tritt der Fehler nur auf, wenn ich versuche Methoden einer Klasse zu überladen.
Wenn ich die Standardversionen der Klassen verwende, kann das Programm richtig gelinkt werden.