PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem beim kompilieren mit usb.h



Alex_K
17-12-2002, 19:12
ich hab mal ein kleines programm geschrieben, um zu versuchen ein usb-gerät anzusprechen:



#include <iostream>
#include <usb.h>
using namespace std;

// Prototypen
struct usb_dev_handle* f35_init();
struct usb_device* f35_get_device_by_id(short, short);

int main()
{
struct usb_device* f35_device;

f35_device = f35_get_device_by_id(0x0a62, 0x0100);

if (f35_device != NULL )
{
cout << "\nDevice not found!!!\n";
}
else
{
cout << "\nDevice found:\n";
cout << "VendorID: " << f35_device->descriptor.idVendor << endl;
cout << "ProductID: " << f35_device->descriptor.idProduct << endl;
}

return 0;
}

struct usb_device* f35_get_device_by_id(short vendor, short product)
{
struct usb_bus* bus;
struct usb_device* dev;

for (bus = usb_busses; bus; bus = bus->next)
for(dev = bus->devices; dev; dev = dev->next)
if (dev->descriptor.idVendor == vendor)
if (dev->descriptor.idProduct == product)
return dev;
return NULL;
}


wenn ich es nun kompilieren will kommt folgende meldung:

alex@Olymp ~/mpmanager $ g++ usbtest.cpp -o usbtest
/tmp/ccOlWL1y.o(.text+0xf5): In function `f35_get_device_by_id(short, short)':
: undefined reference to `usb_busses'
collect2: ld returned 1 exit status

nach meinem wissen sollte das mit "usb_busses" stimmen, was passt da nicht (ich nehme mal an irgendwelche compileroptionen)?

jonasge
17-12-2002, 19:21
Du brauchst noch die usb libary...

-L/pfad/zu/lib -lusblib

bindest du sie mit ein, aber usblib war nur ein bsp, weiß net, wie die genau heißt.

gruss
Jonas

jonasge
17-12-2002, 19:22
also habe gerade nachgeschaut, unter SuSE findest du die unter /usr/lib
und diese heißt libuse.o
also:
-L/usr/lib -lusb

Vieleicht geht es so?

gruss
Jonas

anda_skoa
17-12-2002, 19:39
Wenn es unter /usr/lib ist, kann man das -L auch weglassen.
Dann reicht das -lusb

Ciao,
_

Alex_K
17-12-2002, 20:18
thx,

hat funktioniert.

noch eine allgemeine frage:
wann muss man die libarys explizit angeben?

iostream und math.h muss man zum bsp nicht angeben, usb.h schon ...

anda_skoa
17-12-2002, 21:02
Die streams sind in der C++ Standard Library implementiert.

Für die Funktionen in math.h, bzw cmath in C++, müßte man ansich schon mit libm linken, als -lm angeben.

Der g++ macht das implizit, aber angeben schadet nix :)

Grundsätzlich muß jede lib explizit angeben werden, nur nicht die Standard lib.

Ciao,
_

jonasge
17-12-2002, 22:23
Hi,

wenn man fragen darf, was machst du mit deinem usb-port ?


Gruss
Jonas

Alex_K
17-12-2002, 22:31
ich hab noch ein problem:

was bedeutet die meldung:

usbtest.cpp: In function `int main()':
usbtest.cpp:9: request for member `debug' in `f35_mpman()', which is of non-aggregate type `f35 ()()'
usbtest.cpp:9: `TRUE' undeclared (first use this function)
usbtest.cpp:9: (Each undeclared identifier is reported only once for each function it appears in.)
usbtest.cpp:13: request for member `init' in `f35_mpman()', which is of non-aggregate type `f35 ()()'
usbtest.cpp:15: request for member `f35_dev_handle' in `f35_mpman()', which is of non-aggregate type `f35 ()()'

... ist bei einem anderen programm ...

jonasge
17-12-2002, 22:47
true vieleicht mal klein schreiben?

Alex_K
18-12-2002, 10:37
Original geschrieben von jonasge
wenn man fragen darf, was machst du mit deinem usb-port ?


ich spiel mich ein bischen mit meinem MP3-Player (und hoffe dass da was sinnvolles raus kommt)...