还使用 -Wall 和 -std=c99 和 c11 进行了测试(当然不起作用)
$ gcc -o usb -L/usr/local/lib -lusb-1.0 -I/usr/local/include usbtest.c
输出:
usbtest.c: In function ‘main’:
usbtest.c:14:1: error: label ‘brd_ftdi’ used but not defined
libusb_get_device_list(context, &&brd_ftdi);
usbtest.c:
#include <stdio.h>
#include <libusb-1.0/libusb.h>
int main() {
libusb_device* brd_ftdi;
libusb_device_handle** brd_ftdi_handle;
libusb_context* context;
//libusb_device *** list = &&brd_ftdi;
//libusb_init (libusb_context **);
libusb_init (&context);
libusb_get_device_list(context, &&brd_ftdi);
//libusb_open(brd_ftdi, brd_ftdi_handle);
//libusb_exit(struct libusb_context *);
libusb_exit(context);
return 0;
}
未定义?我知道,但是 libusb_get_device_list() 应该做到这一点(将列表放在那里),所以 WTF?我还测试了声明一个指向 brd_ftdi 的指针并将其传递,但结果相同。
最佳答案
如果您仔细阅读错误消息,它会显示标签 brd_ftdi
未定义,而不是变量。
那是因为你写了&&brd_ftdi
,&&
是一个GCC扩展,意思是the address of a label 。它不是标准 C。
变量的地址只有一个&
。 brd_ftdi
变量的地址是 &brd_ftdi
。
libusb_get_device_list
函数接受一个 libusb_device***
:它将写入 libusb_device
指针列表地址的地址。
您可以像这样使用它:
libusb_device **list_of_devices;
libusb_get_device_list(context, &list_of_devices);
list_of_devices
是指向列表(指向 libusb_device
s 的指针)的第一个指针的指针。
当前对 libusb_open
的注释调用会出现问题,因为您正在将未初始化的指针传递给 libusb_device_handle
的指针。该函数也会将其结果(libusb_device_handle *
)写入您给出的地址。
关于c - libusb-1.0 libusb_get_device_list() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28329443/