Seite 1 von 1

ROBO LT controlle unter Linux mit libroboint

Verfasst: 25 Dez 2015, 20:34
von AHoppe
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

Re: ROBO LT controlle unter Linux mit libroboint

Verfasst: 26 Dez 2015, 09:53
von Ad2
It looks like a linker errror, not a compiler error. So the problem is not the include files but library or object files.

Re: ROBO LT controlle unter Linux mit libroboint

Verfasst: 26 Dez 2015, 10:47
von AHoppe
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

Re: ROBO LT controlle unter Linux mit libroboint

Verfasst: 26 Dez 2015, 21:30
von Torsten
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

Re: ROBO LT controlle unter Linux mit libroboint

Verfasst: 27 Dez 2015, 08:07
von AHoppe
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

Re: ROBO LT controlle unter Linux mit libroboint

Verfasst: 27 Dez 2015, 10:38
von AHoppe
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

Re: ROBO LT controlle unter Linux mit libroboint

Verfasst: 27 Dez 2015, 11:11
von AHoppe
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

Re: ROBO LT controlle unter Linux mit libroboint

Verfasst: 30 Dez 2015, 11:48
von Defiant
Es gibt übrigens auch u.a. einen Python Wrapper der etwas einsteigerfreundlicher sein sollte.

Re: ROBO LT controlle unter Linux mit libroboint

Verfasst: 30 Dez 2015, 19:24
von AHoppe
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