Forum: PC-Programmierung Paket (Linux) installiert, kann es aber nicht in meinem Code Einbinden


von brechbunkt (Gast)


Lesenswert?

Hallo,

unter Linux (Ubuntu ohne Grafik) möchte ich gerne ein USB-device 
ansteuern können. Dazu habe ich zuerst die library libusb installiert:
1
sudo apt-get install libusb-dev

Nun möchte ich diese lib in meinem Code verwenden:
1
...
2
#include <libusb.h>
3
...

Erhalte aber diese Fehlermeldung:
1
ubuntu@arm:~/src$ g++ usb_connect.cpp -lusb -o exe
2
usb_connect.cpp:2:20: fatal error: libusb.h: No such file or directory
3
 #include <libusb.h>
4
                    ^
5
compilation terminated.

Kann mir jemand sagen was ich falsch mache? Meine Vermutung wäre, dass 
ich noch angeben muss, wo sich die lib auf dem System befindet (-L). 
Aber (falls das der Fall ist) leider weiß ich selber nicht, wo Linux die 
libusb hin-installiert hat. Ich sollte noch erwähnen, dass ich leider 
Linux-Neuling bin.

: Verschoben durch Admin
von R. F. (rfr)


Lesenswert?

Du hat nicht die Libusb installiert, und der Compiler hat sie nicht 
gefunden. Installiert hast du nur die zusätzlichen header der libusb, 
aber die lib fehlt noch.

Ändere das mit  sudo apt-get install libusb

und versuche es nochmal.

Gruss

Robert

von Bernd K. (prof7bit)


Lesenswert?

Die Meldung besagt dass er den header nicht findet. Zu dem Punkt wo er 
die lib sucht kommt er gar nicht.

: Bearbeitet durch User
von R. F. (rfr)


Lesenswert?

Die Libusb hat header für den normalen Gebrauch und zusätzlich noch 
welche für debugging und development. Letztere hat er installiert, 
erstere nicht.

von Georg A. (georga)


Lesenswert?

Wenn man -dev installiert, wird das dazuehörige Library-Paket über die 
Abhängigkeiten automatisch installiert.

Es gibt libusb (alt) und libusb-1.0 (neu). Die unterscheiden sich etwas 
in der API, 1.0 hat im wesentlichen libusb_-Prefixe bei den 
Funktionsnamen. Die alte libusb sollte man eigentlich nicht mehr nutzen.

Wenn libusb-1.0-0-dev installiert ist, braucht es

#include <libusb-1.0/libusb.h>

und -lusb-1.0 zum Linken.

von nichtGast (Gast)


Lesenswert?

Mit
> find /usr/include -name libusb.h
kann man den Header suchen.

Wenn der Paketname bekannt ist, kann man mit
> dpkg -S <paket>
den Inhalt anzeigen.

von brechbunkt (Gast)


Lesenswert?

Danke für eure Tipps.

Mit
> find /usr/include -name libusb.h
gab es leider gar keine Ergebnisse.

Mit
> dpkg -S libusb
wurden einige Dateien aufgelistet, die sich fast alle unter 
"/usr/share/doc/libusb-dev/html/" befanden. Wirklich brauchbares konnte 
ich allerdings nicht sehen.

Ich habe nun die libusb deinstalliert, wie beschrieben die libusb-1.0 
installiert und neu im Code eingebunden. Warum auch immer, aber nun 
bekomme ich keine Fehlermeldung mehr.
Mein Problem wäre somit zwar gelöst, aber warum, verstehe ich nun 
trotzdem nicht. Eigentlich hat doch der Compiler "genau" die gleichen 
Infos wie vorher, nur eben mit aktuelleren Daten.

von Bernd D. (Firma: ☣ ⍵ ☣) (bernd_d56) Benutzerseite


Lesenswert?

Installiere dir apt-file.
Dann kannst du mit apt-file search libusb.h finden, in welchem Paket die 
Datei steckt.
Hier bei Debian: libusb-1.0-0-dev: /usr/include/libusb-1.0/libusb.h

apt-file ist gerade für Gelegenheits Linux User sehr hilfreich, weil es 
nicht nur in den installierten, sondern auch in den Repositories sucht

von Rolf M. (rmagnus)


Lesenswert?

R. Freitag schrieb:
> Die Libusb hat header für den normalen Gebrauch und zusätzlich
> noch welche für debugging und development.

Es gibt keine "header für den normalen Gebrauch". Allerdings gibt es ein 
Paket, das nur die Lib selbst als shared object enthält und ein Paket, 
das die dazugehörigen Header und ggf. andere zum Compilieren notwendige 
Hilfsmittel enthält, Die lib wird installiert sein, aber die Header 
nicht.

Georg A. schrieb:
> Wenn libusb-1.0-0-dev installiert ist, braucht es
>
> #include <libusb-1.0/libusb.h>
>
> und -lusb-1.0 zum Linken.

Am besten holt man sich die notwenigen Kommandozeilenparameter for 
Compiler und Linker über pkg-config.

Für den Compiler
1
pkg-config libusb-1.0 --cflags
und für den Linker
1
pkg-config libusb-1.0 --libs

Im Makefile kann man das dann z.B. so eintragen:
1
LIBUSB_CFLAGS := $(shell pkg-config libusb-1.0 --cflags)
2
# ...
3
CFLAGS = $(LIBUSB_CFLAGS) ...(und alle anderen gewünschten Flags)

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.