ROBO LT controlle unter Linux mit libroboint

Alles rund um TX(T) und RoboPro, mit ft-Hard- und Software
Computing using original ft hard- and software
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
AHoppe
Beiträge: 6
Registriert: 25 Dez 2015, 10:46

ROBO LT controlle unter Linux mit libroboint

Beitrag von AHoppe » 25 Dez 2015, 20:34

Hi liebes Forum,

ich bin ein glücklicher Mann, weil ich zu Weihnachten von meiner Familie ein LT Beginner Set geschenkt bekommen habe. :-)

Da ich aber nur einen Linux-Rechner (Ubuntu 14.04 LTS) mein eigen nenne, habe ich zwar die beigefügte Software in einer VM mit Win 7 ausprobiert, hat auch funktioniert, konnte aber zu wenig...

Dann bin ich auf libroboint gestoßen, das ließ sich problemlos mit dem richtigen rep. installieren und ftdiagnose funzt, Schalter, Motoren, Lämpchen lässt sich alles ansteuern. Das Beispielprogramm steuert ebenfalls wie vorgehesen einen angeschlossenen Motor.

Nun aber mein Problem. Mit C habe ich bisher noch nicht viel gemacht, allerdings mit anderen Sprachen. Ich habe example.c ein wenig verändert und wollte es mit gcc zu einem ausführbaren Programm verwandeln, erhalte jedoch bei Eingabe von gcc -o e1 example.c folgende Fehlermeldungen:

/tmp/ccf4UEAA.o: In Funktion `main':
example.c:(.text+0x19): Nicht definierter Verweis auf `InitFtUsbDeviceList'
example.c:(.text+0x1e): Nicht definierter Verweis auf `GetNumFtUsbDevice'
example.c:(.text+0x39): Nicht definierter Verweis auf `GetFtUsbDeviceHandle'
example.c:(.text+0x49): Nicht definierter Verweis auf `OpenFtUsbDevice'
example.c:(.text+0x5a): Nicht definierter Verweis auf `StartFtTransferArea'
example.c:(.text+0x66): Nicht definierter Verweis auf `GetFtTransferAreaAddress'
example.c:(.text+0xcc): Nicht definierter Verweis auf `StopFtTransferArea'
example.c:(.text+0xd8): Nicht definierter Verweis auf `CloseFtDevice'
collect2: error: ld returned 1 exit status

Scheinbar findet gcc die roboint.h nicht, die jedoch testweise sowohl in

/usr/include
/usr/local/include

als auch im selben Verzeichnis wie example.c liegt.

example.c beinhaltet die Anweisung: #include "roboint.h"

Hat jemand einen Tipp für mich? Ist vermutlich eher ein Problem von C, jedoch haben andere C-Dateien, die ich in ausführbare Programme umwandeln musste bisher funktioniert...

Viele Grüße

Andreas

Ad2
Beiträge: 306
Registriert: 31 Okt 2010, 22:20

Re: ROBO LT controlle unter Linux mit libroboint

Beitrag von Ad2 » 26 Dez 2015, 09:53

It looks like a linker errror, not a compiler error. So the problem is not the include files but library or object files.

AHoppe
Beiträge: 6
Registriert: 25 Dez 2015, 10:46

Re: ROBO LT controlle unter Linux mit libroboint

Beitrag von AHoppe » 26 Dez 2015, 10:47

Thank you. I looked for the library files and found them in /usr/lib and /usr/local/lib: libroboint.so -> libroboint.so.0 -> libroboint.so.0.5.3

I tried the command

gcc -L/usr/local/lib -I/usr/local/include -o e1 example.c

with the same errors. I did not find any object-files.

The command
gcc -S -L/usr/local/lib -I/usr/local/include example.c
ends without error and creates example.c

The command
gcc -c -L/usr/local/lib -I/usr/local/include example.c
ends without errors, too. The file example.o is created.

Any ideas? Thank you for your help. :-)

Andreas

Torsten
Beiträge: 313
Registriert: 29 Jun 2015, 23:08
Wohnort: Gernsheim (Rhein-Main-Region)

Re: ROBO LT controlle unter Linux mit libroboint

Beitrag von Torsten » 26 Dez 2015, 21:30

Hallo Andreas,
AHoppe hat geschrieben:I looked for the library files and found them in /usr/lib and /usr/local/lib: libroboint.so -> libroboint.so.0 -> gcc -L/usr/local/lib -I/usr/local/include -o e1 example.c
es genügt nicht, nur den Pfad zu den Include- und Library-Dateien zu setzen. Die Libraries müssen explizit dazugelinkt werden. Versuche mal das folgende Kommando:

gcc -L/usr/local/lib -I/usr/local/include -lroboint -o e1 example.c

Viele Grüße
Torsten

AHoppe
Beiträge: 6
Registriert: 25 Dez 2015, 10:46

Re: ROBO LT controlle unter Linux mit libroboint

Beitrag von AHoppe » 27 Dez 2015, 08:07

Hi Torsten,

danke für den HInweis, aber leider macht mein gcc mit

gcc -I/usr/local/include -L/usr/local/lib -lroboint -o e1 example.c

immer noch:

/tmp/ccjMpyr1.o: In Funktion `main':
example.c:(.text+0x19): Nicht definierter Verweis auf `InitFtUsbDeviceList'
example.c:(.text+0x1e): Nicht definierter Verweis auf `GetNumFtUsbDevice'
example.c:(.text+0x39): Nicht definierter Verweis auf `GetFtUsbDeviceHandle'
example.c:(.text+0x49): Nicht definierter Verweis auf `OpenFtUsbDevice'
example.c:(.text+0x5a): Nicht definierter Verweis auf `StartFtTransferArea'
example.c:(.text+0x66): Nicht definierter Verweis auf `GetFtTransferAreaAddress'
example.c:(.text+0xcc): Nicht definierter Verweis auf `StopFtTransferArea'
example.c:(.text+0xd8): Nicht definierter Verweis auf `CloseFtDevice'
collect2: error: ld returned 1 exit status


Ich schmeiße jetzt mal das rep und die über die Paketverwaltung installierten Dateien raus und übersetze alles aus den Quellen direkt, vielleicht hilfts. Ansonsten übernimmt vorerst mal python die Ansteuerung, geht auch, dann lerne ich das wenigstens. :-)

Viele Grüße

Andreas

AHoppe
Beiträge: 6
Registriert: 25 Dez 2015, 10:46

Re: ROBO LT controlle unter Linux mit libroboint

Beitrag von AHoppe » 27 Dez 2015, 10:38

Also mit "alles platt machen und wieder neu installieren", egal ob über die Paketverwaltung oder händisch, wars nicht getan.

Ich habe jetzt mal aus example.c eine ganze Menge auskommentiert und als "Hello World" umgeschrieben:

Code: Alles auswählen

/** @file */

#include <stdio.h>
#include <usb.h>
#include "roboint.h"

/**
 * \brief real word example
 *
 * This example will start running Motor 1 with low speed to the right, wait 2 seconds
 * and then max speed to the left until the input #1 is high
 *
 */
int main() {
	FT_HANDLE hFt = NULL;
	FT_TRANSFER_AREA *transfer_area = NULL;
	printf ("Hello World");
	return 0;
}
Das auskommentierte habe ich gelöscht. gcc -lroboint -o e1 example.c läuft jetzt ohne Probleme durch.

Um bsp. InitFtUsbDeviceList() nutzen zu können, dafür ist doch #include "roboint.h" zuständig, oder? Oder habe ich da einen durch php und js zu arg eingeschränkten Horizont?

Viele Grüße

Andreas

AHoppe
Beiträge: 6
Registriert: 25 Dez 2015, 10:46

Re: ROBO LT controlle unter Linux mit libroboint

Beitrag von AHoppe » 27 Dez 2015, 11:11

Problem gelöst. Die Lösung habe ich hier gefunden: https://wiki.ubuntuusers.de/GCC

gcc wird wie folgt aufgerufen: gcc -o e1 example.c -lroboint

-lroboint also erst ganz hinten... Und jetzt klappts...

Danke an alle Helfer.

Viele Grüße

Andreas

Benutzeravatar
Defiant
Beiträge: 356
Registriert: 31 Okt 2010, 21:42
Wohnort: Narn Homeworld
Kontaktdaten:

Re: ROBO LT controlle unter Linux mit libroboint

Beitrag von Defiant » 30 Dez 2015, 11:48

Es gibt übrigens auch u.a. einen Python Wrapper der etwas einsteigerfreundlicher sein sollte.
"Propaganda does not deceive people; it merely helps them to deceive themselves."
E Hoffer

AHoppe
Beiträge: 6
Registriert: 25 Dez 2015, 10:46

Re: ROBO LT controlle unter Linux mit libroboint

Beitrag von AHoppe » 30 Dez 2015, 19:24

Ja, den habe ich schon ausprobiert und für gut befunden, aber ich wollte eh in C einsteigen und da passt das jetzt ganz gut.

Viele Grüße und einen guten Rutsch ins Forum

Andreas

Antworten