c - libusb-1.0 libusb_get_device_list() 失败

标签 c libusb libusb-1.0

还使用 -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_devices 的指针)的第一个指针的指针。

当前对 libusb_open 的注释调用会出现问题,因为您正在将未初始化的指针传递给 libusb_device_handle 的指针。该函数也会将其结果(libusb_device_handle *)写入您给出的地址。

关于c - libusb-1.0 libusb_get_device_list() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28329443/

相关文章:

c++ - 热插拔事件在 libubs 1.0 中不起作用

c++ - USB 传输的 LibUSB C++ 格式不同

c - 在 C 中为并行编程 openmp 和 mpi 分配内存的最佳方法

c - 堆栈实现将代码放在多个文件中

c - 使用C语言进行socket编程猜整数游戏

java - 没有 USB 设备识别 libusbJava/ubuntu 13.04

c++ - 在 Linux ARM 上使用 libusb 的状态热敏打印机

c - 从 C 中的文件加载动态增广矩阵

linux - 如何在运行 Node.js 的 Raspberry Pi (Debian) 上解决 LIBUSB_ERROR_BUSY

cmake - fatal error : libusb/libusb. h:没有这样的文件或目录 librtlsdr 安装 GNU radio