Probleme mit libftdi

OP #1027852
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
Gast #1027955
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
Gast #1027988
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
Gast #1027991
... oder ganz elegant:
1
  g++ file.cpp $(libftdi-config --cflags) $(libftdi-config --libs) -o file
Das Tool wird da dankenswerterweise mitgeliefert.

Hermann-Josef

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.