【问题标题】:libusb dereferencing pointer to incomplete typelibusb 取消引用指向不完整类型的指针
【发布时间】:2013-06-25 16:33:27
【问题描述】:

我知道关于这个问题有很多问题,但具体来说,我在 Ubuntu 上实现 libusb 库时遇到了麻烦。 这是我的代码:

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 网站上已建立的示例。

任何建议都会很棒。谢谢!

【问题讨论】:

  • 表达式device->next 并没有真正做任何事情。我猜你的意思是device = device->next
  • 是的,抱歉,错版了。所有错误仍然适用。
  • 是否包含定义结构的头文件?
  • 除非它是标准“libusb.h”以外的头文件,否则是的。但我会尝试使用其他一些类似的头文件进行编译。

标签: c pointers dereference libusb libusb-1.0


【解决方案1】:

原来我包含了错误的库......虽然我真的不知道为什么。我没有像这样在编译时包含并引用该库:

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

这是为我做的,也可能为你做的!祝你好运!

【讨论】:

    猜你喜欢
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多