Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Überladen von Methoden aus Bibliotheken

  1. #1
    SegFault II.
    Gast

    Question Überladen von Methoden aus Bibliotheken

    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.

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.10.1999
    Ort
    Dresden
    Beiträge
    255
    Vertausche einmal die Linkreihenfolge in: -loSDL -lSDL.

    Thomas

  3. #3
    SegFault II.
    Gast
    Nein, leider kommt immer noch die selbe Fehlermeldung

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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,
    _

  5. #5
    SegFault II.
    Gast
    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.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •