2011-10-12 16 views
8

Próbuję skompilować przykładowy libusb.c dostarczanych przez pakiet libusb (jeśli dl kodu źródłowego).Kompilacja przeciwko libusb-dev Ubuntu

To nie działa na co najmniej.

#include <stdio.h> 
#include <sys/types.h> 
#include <libusb/libusb.h> 

że powoduje niepowodzenie, nie ma libusb/libusb.h to usb.h, więc to zmienić. I zawodzi w nowy i innowacyjny sposób.

mam skopiowany plik skończy, dokładnie, i nazwał to przyklad.c

Używam tych poleceń i odmianach:

gcc -o example example.c -lusb -L /usr/lib/libusb.a 
gcc -o example example.c -lusb -L /usr/lib/libusb.so 

Błędy przy kompilacji dostaję to:

example.c:25: error: expected ‘)’ before ‘*’ token 
example.c: In function ‘main’: 
example.c:46: error: ‘libusb_device’ undeclared (first use in this function) 
example.c:46: error: (Each undeclared identifier is reported only once 
example.c:46: error: for each function it appears in.) 
example.c:46: error: ‘devs’ undeclared (first use in this function) 

Line 25: static void print_devs(libusb_device **devs) 

Line 46: libusb_device **devs; 

Najpierw podążyłem za tutorialem, który nie zdołał się skompilować, mniej więcej w ten sam sposób, więc postanowiłem po prostu spróbować podanego przykładu, a to się nie udało.

Czy ktoś może mi pomóc? Wyjaśnij, co robię źle, bo zgubiłem się na tym.

+0

Który plik dokładnie skopiowałeś i nazwałeś example.c? – nmichaels

+0

libusb-1.0.8/libusb-1.0.8/examples/lsusb.c Mam zamiar spróbować skompilować go na Ubuntu od zera, jak pierwotnie użyłem apt-get install libusb-dev –

+0

Po prostu zapamiętaj, że co kiedyś 'examples/lsusb.c', który mogłem uzyskać przez' apt-get source libusb-1.0-0' w Ubuntu 11.04, jest teraz najwyraźniej [examples/listdevs.c] (http://git.libusb.org /?p=libusb.git;a=blob;f=examples/listdevs.c;h=6ab891725a36424a7f59d5a8ff2c20a7deaec858;hb=HEAD). – sdaau

Odpowiedz

21

Oto, co musiałem zrobić na Debianie. Powinien być co najmniej podobny w Ubuntu.

Install libusb-1.0-0-dev

Zamiast:

#include <libusb/libusb.h> 

zrobić:

#include <libusb.h> 

skompilować z:

gcc example.c `pkg-config --libs --cflags libusb-1.0` 
+0

Super fajnie, że działało ... Nie wiem, co to znaczy pkg-config - libbs itp. Czy mógłbyś to wyjaśnić lub powiązać z jakąś dokumentacją? –

+2

Google to. To bardzo przydatne narzędzie. Zamiast ręcznie dodawać flagi kompilacji, możesz po prostu określić, jakie biblioteki chcesz mieć, przekazać je do 'pkg-config' i wyprowadzić wszystkie potrzebne flagi." –

6

Wystarczy pl wyjaśnienie, dlaczego próba R eplace libusb/libusb.h z usb.h kończy się niepowodzeniem: usb.h jest nagłówkiem od linux-headers, a nie od libusb-dev. Potrzebujesz zamiast tego #include <libusb.h>.

+0

Dzięki, masz rację. –

+0

Ta odpowiedź jest całkowicie niepoprawna. /usr/include/usb.h nie jest z linux-headers (które NIE są przeznaczone dla userspace do połączenia), ale raczej jest plikiem włączającym dla starszego API libusb-0.1, podczas gdy /usr/include/libusb-1.0/libusb .h jest plikiem włączającym nowszego API libusb-1.0. Nie można ich bezpośrednio wymieniać. –

Powiązane problemy