libusb разыменовывает указатель на неполный тип

Я знаю, что есть много вопросов по этой проблеме, но конкретно у меня возникли проблемы с реализацией библиотеки libusb в Ubuntu. Вот мой код:

struct usb_bus *busses;
struct usb_bus *bus;
struct usb_device *digiSpark = NULL;
struct usb_device *device;


if(debug) printf("Detecting USB devices...\n");
// Initialize the USB library
usb_init();

// Enumerate the USB device tree
usb_find_busses();
usb_find_devices();

// Iterate through attached busses and devices
busses = usb_get_busses();
for (bus = busses; bus; bus = bus->next)
{
    for (device = bus->devices; device; device = device->next)
    {
        // Check to see if each USB device matches the DigiSpark Vendor and Product IDs
        if((device->descriptor.idVendor == 0x16c0) && (device->descriptor.idProduct == 0x05df))
        {
            if(debug) printf("Detected DigiSpark... \n");
            digiSpark = device;
        }
    }
}

Это было почти дословно взято из примера libusb:

http://libusb.sourceforge.net/doc/examples-code.html

Но он генерирует массу ошибок «разыменование указателя на неполный тип».

В частности, я получаю этот указатель разыменования на неполную ошибку типа в следующих строках:

busses = usb_get_busses();

for (bus = busses; bus; bus->next)

for (device = bus->devices; device; device->next)

И дважды в следующей строке:

if((device->descriptor.idVendor == 0x16c0) && (device->descriptor.idProduct == 0x05df))

Как я уже сказал, это странно, потому что я (по большей части) не придумываю это, это взято из установленного примера с веб-сайта lib.

Любые предложения были бы замечательными. Спасибо!


person eatonphil    schedule 25.06.2013    source источник
comment
Выражение device->next на самом деле ничего не делает. Я думаю, вы имеете в виду device = device->next?   -  person Some programmer dude    schedule 25.06.2013
comment
Да, извините, опечатка. Все ошибки остаются в силе.   -  person eatonphil    schedule 25.06.2013
comment
И вы включаете файлы заголовков, в которых определены структуры?   -  person Some programmer dude    schedule 25.06.2013
comment
Если это не заголовочный файл, отличный от стандартного libusb.h, тогда да. Но я попытаюсь скомпилировать некоторые другие похожие заголовочные файлы.   -  person eatonphil    schedule 25.06.2013


Ответы (1)


Оказывается, я включил не ту библиотеку... хотя я действительно не уверен, почему. Вместо того, чтобы включать, я включил и сослался на библиотеку во время компиляции, например:

>> gcc main.c -lusb
>> gcc main.o -o main -lusb

Это сделало это для меня и может сделать это для вас! Удачи!

person eatonphil    schedule 25.06.2013