Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Linker erkennt Funktion in Library nicht

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.08.2004
    Ort
    Sydney
    Beiträge
    36

    Linker erkennt Funktion in Library nicht

    Hi,

    ich habe ein seltsames problem.
    Verwende den Header einer compilierten Datei um auf Funktionen dieser Library zuzugreifen.
    Wenn ich mein Programm starte bringt er ": undefined reference to ..." fuer alle Funktionen aus dem Header. Die Library findet er, da wenn sie nicht da ist, er die Fehlermeldung dafuer bringt.

    THX 4 HELP
    THX 4 HELP
    Tommy
    http://www.sunrise3d.de

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Und wir sollen jetzt raten was du genau machst? Ich vermute mal du linkst gar nicht gegen die Bibliothek.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer
    Registriert seit
    17.08.2004
    Ort
    Sydney
    Beiträge
    36

    OK - das ist das Makefile+Header von 5DT

    Header

    Code:
    /*--------------------------------------------------------------------------*/
    // fglove.h
    //
    // 5DT Data Glove driver SDK
    // Version 1.02
    //
    // Copyright (C) 2000, 5DT <Fifth Dimension Technologies>
    // http://www.5dt.com/
    /*--------------------------------------------------------------------------*/
    #ifndef _FGLOVE_H_
    #define _FGLOVE_H_
    /*--------------------------------------------------------------------------*/
    enum EfdGloveHand
    {
            FD_HAND_LEFT,   // left-handed glove
            FD_HAND_RIGHT   // right-handed glove
    };
    
    enum EfdGloveTypes
    {
            FD_GLOVENONE,   // no glove
            FD_GLOVE7,      // 7-sensor
            FD_GLOVE7W,     // 7-sensor, wireless
            FD_GLOVE16,     // 16-sensor
            FD_GLOVE16W     // 16-sensor, wireless
    };
    
    enum EfdSensors
    {
            FD_THUMBNEAR=0,
            FD_THUMBFAR,
            FD_THUMBINDEX,
            FD_INDEXNEAR,
            FD_INDEXFAR,
            FD_INDEXMIDDLE,
            FD_MIDDLENEAR,
            FD_MIDDLEFAR,
            FD_MIDDLERING,
            FD_RINGNEAR,
            FD_RINGFAR,
            FD_RINGLITTLE,
            FD_LITTLENEAR,
            FD_LITTLEFAR,
            FD_THUMBPALM,
            FD_WRISTBEND,
            FD_PITCH,
            FD_ROLL
    };
    /*--------------------------------------------------------------------------*/
    typedef struct
    {
            // The contents of this struct are platform-dependent and subject to
            // change. You should not manipulate the contents of this struct directly.
            void           *m_pStuff;
    } fdGlove;
    /*--------------------------------------------------------------------------*/
    fdGlove *fdOpen(char *pPort);
    int   fdClose(fdGlove *pFG);
    int   fdGetGloveHand(fdGlove *pFG);
    int   fdGetGloveType(fdGlove *pFG);
    int   fdGetNumSensors(fdGlove *pFG);
    void  fdGetSensorRawAll(fdGlove *pFG, unsigned short *pData);
    unsigned short fdGetSensorRaw(fdGlove *pFG, int nSensor);
    void  fdSetSensorRawAll(fdGlove *pFG, unsigned short *pData);
    void  fdSetSensorRaw(fdGlove *pFG, int nSensor, unsigned short nRaw);
    void  fdGetSensorScaledAll(fdGlove *pFG, float *pData);
    float fdGetSensorScaled(fdGlove *pFG, int nSensor);
    int   fdGetNumGestures(fdGlove *pFG);
    int   fdGetGesture(fdGlove *pFG);
    void  fdGetCalibrationAll(fdGlove *pFG, unsigned short *pUpper, unsigned short *pLower);
    void  fdGetCalibration(fdGlove *pFG, int nSensor, unsigned short *pUpper, unsigned short *pLower);
    void  fdSetCalibrationAll(fdGlove *pFG, unsigned short *pUpper, unsigned short *pLower);
    void  fdSetCalibration(fdGlove *pFG, int nSensor, unsigned short nUpper, unsigned short nLower);
    void  fdResetCalibration(fdGlove *pFG);
    void  fdGetSensorMaxAll(fdGlove *pFG, float *pMax);
    float fdGetSensorMax(fdGlove *pFG, int nSensor);
    void  fdSetSensorMaxAll(fdGlove *pFG, float *pMax);
    void  fdSetSensorMax(fdGlove *pFG, int nSensor, float fMax);
    void  fdGetThresholdAll(fdGlove *pFG, float *pUpper, float *pLower);
    void  fdGetThreshold(fdGlove *pFG, int nSensor, float *pUpper, float *pLower);
    void  fdSetThresholdAll(fdGlove *pFG, float *pUpper, float *pLower);
    void  fdSetThreshold(fdGlove *pFG, int nSensor, float fUpper, float fLower);
    void  fdGetGloveInfo(fdGlove *pFG, unsigned char *pData);
    void  fdGetDriverInfo(fdGlove *pFG, unsigned char *pData);
    /*--------------------------------------------------------------------------*/
    #endif // #ifndef _FGLOVE_H_
    /*--------------------------------------------------------------------------*/
    und Makefile

    Code:
    #
    # makefile for testglove, a simple console app to demonstrate reading the
    # glove
    #
    # Copyright (C) 2000, 5DT <Fifth Dimension Technologies>
    #
    
    CPP = g++
    CFLAGS = -Wall
    BIN = testglove
    LIBS = -lfglove
    OBJFILES = testglove.o
    
    default: $(OBJFILES)
            $(CPP) -o $(BIN) $(OBJFILES) $(LIBS)
    
    clean:
            rm -f $(BIN) $(OBJFILES) *~ core #*
    
    %.o: %.cpp
            $(CPP) $(CFLAGS) -c $< -o $@
    Header ist im akutellen Verzeichnis, Library habe ich probiert in MEIN_LIB_DIR, /usr/local/lib, /usr/lib.
    Die Library findet er aber nicht die Funktionen in der Library...
    THX 4 HELP
    Tommy
    http://www.sunrise3d.de

  4. #4
    Registrierter Benutzer Avatar von SeeksTheMoon
    Registriert seit
    22.02.2002
    Beiträge
    762
    kannst Du es auch nicht manuell machen?
    g++ -I. -L. -lfglove meinprog.c
    Wenn das nicht geht, dann sind die fertigen Kompilate vielleicht nicht binärkompatibel zu dem was Dein Compiler produziert, bzw was der Linker erwartet.
    Könnte an einer unterschiedlichen gcc-Version liegen in der es ein ABI-Change gab.
    I haven't lost my mind - It's somewhere on a backup-disc

  5. #5
    Registrierter Benutzer
    Registriert seit
    11.03.2004
    Beiträge
    40
    Hi
    sehe ich das richtig, die Bibliothek ist eine C Bibliothek?
    Du verwendest C++ und diese Bibliothek hat offenbar keinen C++ Support eingebaut.

    Wenn du
    Code:
    #include "fglove.h"
    in deinem Programm verwendest, versuch stattdessen mal
    Code:
    extern "C" {
    #include "fglove.h"
    }
    CU
    Andi

  6. #6
    Registrierter Benutzer
    Registriert seit
    17.08.2004
    Ort
    Sydney
    Beiträge
    36

    Also

    ich hatte ales probiert, und die Loesung ist.... Die .so war eine falsche library. Habe vom Support von 5DT eine neue bekommen und siehe da es funktioniert.

    Echt toll wie man sich manchmal heiss macht und es is mal nicht das eigene problem

    Trotzdem danke fuer eure Hilfe
    THX 4 HELP
    Tommy
    http://www.sunrise3d.de

Lesezeichen

Berechtigungen

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