undefined reference to...

macke_a

Mitglied
Beiträge
28
Hallo ! Ich bin ebenfalls ein Neuling und habe diese selben Probleme, wie manch anderer hier. Allerdings habe ich leider keinen nennenswerten Ansatz gefunden, wie ich eine Lösung bekommen kann. Es wäre nett, falls jemand von Euch kurz über meinen Quelltext schauen kann um mir ne eventuell einen Lösungsansatz mitteilen kann.

#include "sdkconstants.h"
#include "TomTomAPI.h"
#include "TomTomGoFileLayer.h"
#define CLIENT_NAME "client"

int main()
{
int res;
MTomTomCommunicationLayerInterface *mycomms = DEFAULT_TRANSPORTATION_LAYER(CLIENT_NAME,2005,TOMTOM_TCPIP_PORT);
CTomTomAPI api(*mycomms);
CTomTomAPI::TError err;
res = api.FlashMessage(&err, "Hello!", 3000);
delete mycomms;
return 0;
}

Soweit dies und nun die folgende Fehlermeldung:

flash.o(.text+0x1C): In function 'main':
: undefined reference to `CTomTomFileLayer::New(char const*,char const*,int)'
flash.o(.text+0x54): In function 'main':
: undefined reference to ´CTomTomAPI::Flash Message(CTomTomAPI::TError*,char*,int)'
collect2: ld returned 1 exit status

Kann mir jemand diese etwas besser erklären, damit ich ungefähr ne Richtung habe, wo ich meine Fehler suchen muss..?
Danke im Vorraus für Eure Hilfen!!!
 

rikola

Foren Gott
Beiträge
2.133
Eine 'undefined reference' ist ein linker-Fehler und deutet i.d.R. darauf hin, dass eine Funktion o.ae. zwar deklariert, jedoch nicht definiert ist.
In Deinem Fall enthalten die Tom-Header dateien, die in den include-direktiven stehen, wohl die entsprechenden Funktionen drin, jedoch nur deren Deklaration.
Das bedeutet, Du musst rausfinden, wie die entsprechende Bibliothek heisst und die beim Kompilieren mitangeben. Ich kenne tomtom nicht, daher ein anderes Beispiel, das Dir hoffentlich weiterhilft:

In math.h sind Funktionen wie exp, sin, usw. deklariert. Damit das Programm den Sinus jedoch tatsaechlich auch berechnen kann, muss man dem Kompiler mitteilen, dass er (oder besser der Linker) in der Bibliothek libm.a nachgucken soll.
Deswegen muss man sowas mit 'gcc -o myprog myprog.c -lm' kompilieren.

Mit anderen Worten, falls es auf Deinem System so etwas wie libtomtom.a gibt, dann gib dem Kompiler noch die Option '-ltomtom' mit.
 

macke_a

Mitglied
Beiträge
28
@rikola
Danke für Deinen Beitrag. Du hast nicht ganz unrecht mit Deiner Vermutung. Es gibt noch einen Hinweis. Allerdings kann ich diesen nicht richtig interpretieren. Also Englisch kann ich lesen, nur der Umgang mit C++ bereitet mir etwas Schwierigkeiten.
### Beitrag-Anfang ###:

To communicate with the TomTom GO, a communication object has to be set up first. This is done through :

MTomTomCommunicationLayerInterface *mycomms =
DEFAULT_TRANSPORTATION_LAYER(CLIENT_NAME,2005,TOMTOM_TCPIP_PORT);

where

* CLIENT_NAME is defined in the example as "client"
* 2005 is the port to listen to when using the TCP/IP layer. Currently TCP/IP is not supported.
* TOMTOM_TCPIP_PORT is defined in sdkconstant.h. Currently TCP/IP is not supported.
* DEFAULT_TRANSPORTATION_LAYER is defined in sdkconstants.h as:

#define DEFAULT_TRANSPORTATION_LAYER(appname,thisport,otherport)
CTomTomFileLayer::New(appname)

So communication object "mycomms" is defined as an instance of the class MTomTomCommunicationLayerInterface. This class provides the means to send information to and receive information from the navigation application.

The method New, which is defined for the class CTomTomFileLayer, creates the communication object for use on the TomTom GO, and establishes a connection with the application.

### Beitrag-Ende ###
Dort steht etwas von einer Objekt Datei. Nur wie soll ich diese erstellen?
Wäre sehr nett, wenn Du mir dafür ne Hilfe geben könntest!!!!
Danke im Vorraus!!
 

rikola

Foren Gott
Beiträge
2.133
Ich habe nach zweimaligem Durchlesen nichts von einer Objektdatei gefunden, nur von Objekten. Ein Objekt ist ein haeufiger Begriff, wenn man mit c++ programmiert, allerdings kann ich Dir hier keinen Kurs in C++ geben ;-)

Ausserdem sollte Dein zweiter Code-Ausschnitt nichts mit der urspruenglichen Fehlermeldung zu tun haben. Wenn er es taete, wuerdest Du eher Kompiler- und keine Linker-Fehler bekommen.
 

macke_a

Mitglied
Beiträge
28
@rikola
Natürlich hast Du recht! Ich habe einen zusätzlichen Verweis gefunden, der mir weitere Lib einführt! Das Programm läßt sich jetzt auch linken und ich habe jetzt meine Lösung... Juhuuu

Allerdings was verstehen die denn jetzt unter einem "Communications Objekt"?
To communicate with the TomTom GO, a communication object has to be set up first. This is done through : ...

Dann habe ich diesen Abschnitt nicht richtig verstanden, kann mir vielleicht jemand dieses erklären? Oder sehe ich den Wald vor lauter Bäume nicht mehr?
 

rikola

Foren Gott
Beiträge
2.133
Ich denke, dass mit diesem Funktionsaufruf gewisse Parameter initialisiert werden, auf die dann alle anderen TomTomGo-Funktionen sich beziehen koennen, da Du ja mit einem bestimmten Geraet kommunizieren moechtest und die Signale nicht irgendwohin schicken. Genauer weiss ich es in dem Fall jedoch auch nicht, da ich, wie gesagt, TomTomGo ueberhaupt nicht kenne.
 

macke_a

Mitglied
Beiträge
28
@rikola
Danke auf jeden Fall für Deine Beiträge!!

Ich habe die Lösung gestern Abend nach zwei Tagen endlich gefunden....
Well done...
mfg macke_a
 

Ähnliche Themen

Funktion nicht gefunden

Raspberry Pi custom Kernel

Linker meckert über nicht definierte Funktion

Schwierigkeiten beim compillieren

Problem beim Kompilieren (Redhat 5)

Oben