Forum: Compiler & IDEs Probleme mit libftdi


von Michael L. (nemesisod)


Lesenswert?

Hallo zusammen,

ich habe mir die aktuelle Version der libftdi runtergeladen und auf 
meinem Linuxsystem installiert. Die ftdi.h wird auch gefunden, aber wenn 
ich die Funktionen aufrufe wird mir folgender Fehler ausgegeben:
"undefined reference to `ftdi_init'"

Also findet er die passende ftdi.c datei nicht.

Habe ich etwas bei der installation falsch gemacht? bin noch relativ neu 
bei Linux.

habe folgende Befehle ausgeführt:

tar -xvzf libftdi-0.14.tar.gz

dann im Ordner

./configure
make
make install

Das müsste doch eigentlich richtig sein. Libusb habe ich auch 
installiert.

Kann mir jemand helfen??

Gruß
Nemesis

von Hermann-Josef (Gast)


Lesenswert?

Hallo Michael,

in Deinem Makefile musst Du auch mit der Bibliothek linken, also sollte 
mindesten ein -lftdi (so die Bibliothek libftdi.a oder libftdi.so heißt) 
in der Kommandozeile für den Linker drin stehen.

Falls das 'make install' die Bibliothek nicht in einen Standardpfad (wie 
z.B. /lib, /usr/lib oder /usr/local/lib) installiert hat, muss man auch 
noch den angeben:
-L<path_to_library> also z.B. -L/opt/ftdi/lib -lftdi

Womöglich ist schon /usr/local/lib nicht mehr Standard...

Da ich das Produkt nicht kenne, kann ich bezüglich weiterer Optionen 
auch nur raten, bei einer dynamischen Bibliothek (= endet auf .so) muss 
der Pfad zu ihr entweder via Environment-Variable LD_LIBRARY_PATH 
bekannt gemacht sein oder in /etc/ld.so.config drin stehen und via 
ldconfig bekannt gemacht worden sein.

Viel Erfolg
Hermann-Josef

von Michael L. (nemesisod)


Lesenswert?

Ich nutze keine makefile,

ich compiliere immer mit

g++ file.cpp -o file

wie könnte denn eine std. makefile aussehen???

danke für deine Antwort

Gruß
Nemesis

von Hermann-Josef (Gast)


Lesenswert?

Hallo,

tja, mal für die Kommandozeile sinngemäß und dann auch einfacher:

  g++ file.cpp -lftdi -lusb -o file

unter der Annahme libusb und libftdi sind in Standard-Pfaden 
installiert, ist auch recht wahrscheinlich.

oder

  g++ file.cpp -L/usr/local/lib -lftdi -lusb -o file

Bei kleinen Projekten lohnt sich ein Makefile noch nicht so richtig, 
außer wenn man generell schreibfaul ist, 'make' ist halt schneller zu 
tippen.

Habe das mal auf meine alte SuSE 9.1 draufgezogen, es geht in der Tat 
nach /usr/local/lib und es ist eine dynamische Bibliothek.

Nur statisch linken würde man dann mittels:

  g++ -static file.cpp -L/usr/local/lib -lftdi -lusb -o file

oder nur libftdi.a statisch linken:

  g++ file.cpp /usr/local/lib/libftdi.a -lusb -o file

Hermann-Josef

von Hermann-Josef (Gast)


Lesenswert?

... oder ganz elegant:
1
  g++ file.cpp $(libftdi-config --cflags) $(libftdi-config --libs) -o file
Das Tool wird da dankenswerterweise mitgeliefert.

Hermann-Josef

von Michael L. (nemesisod)


Lesenswert?

Danke,

jetzt klappt es.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.