首页 > 解决方案 > 使用代码块在 Linux 上使用 C++ 中的地址获取 USB 大容量存储设备

问题描述

我是整个 linux 和 c/c++ 开发世界的新手,我正在尝试将我的一个 Windows 程序移植到 Linux。我一直在弄清楚如何获取 USB 设备,例如记忆棒、连接到系统的外部硬盘驱动器以及它们的地址,以便它们可以与某些命令行实用程序一起使用。

我的开发环境:

我知道在 Windows 上,您可以使用 GetLogicalDrives() 来获取连接到系统的驱动器,从而确定设备是否为 USB。我曾尝试使用 libusb(带有它的头文件),但无法弄清楚如何获取设备并将它们添加到下拉框中。

我使用了 libusb 文档中的以下代码:

static void print_devs(libusb_device **devs)
{
    libusb_device *dev;
    int i = 0, j = 0;
    uint8_t path[8]; 

    while ((dev = devs[i++]) != NULL) {
        struct libusb_device_descriptor desc;
        int r = libusb_get_device_descriptor(dev, &desc);
        if (r < 0) {
            fprintf(stderr, "failed to get device descriptor");
            return;
        }

        printf("%04x:%04x (bus %d, device %d)",
            desc.idVendor, desc.idProduct,
            libusb_get_bus_number(dev), libusb_get_device_address(dev));

        r = libusb_get_port_numbers(dev, path, sizeof(path));
        if (r > 0) {
            printf(" path: %d", path[0]);
            for (j = 1; j < r; j++)
                printf(".%d", path[j]);
        }
        printf("\n");
    }
}

但这给了我以下错误:undefined reference to 'libusb_get_device_descriptor'

我已经包含了该文件libusb.h以及.libusb.alibusb.so

我想要做的就是获取附加的可移动 USB 驱动器的列表及其地址(以/dev/sda或类似的形式),以便我可以将它们添加到下拉框中以供以后使用。

当一切都说完了,用户将从下拉列表中选择一个 USB 驱动器,然后如果用户选择这样做,应用程序将格式化设备,然后将一些文件复制到该设备上。

编辑:

这是构建日志的输出:

-------------- Build: Debug in BlackBoxISOBeta (compiler: GNU GCC Compiler)---------------

g++  -o bin/Debug/BlackBoxISOBeta obj/Debug/BlackBoxISOBetaApp.o obj/Debug/BlackBoxISOBetaMain.o obj/Debug/BurnUSB.o  -L/usr/lib/x86_64-linux-gnu -pthread   -lwx_gtk2u_xrc-3.0 -lwx_gtk2u_html-3.0 -lwx_gtk2u_qa-3.0 -lwx_gtk2u_adv-3.0 -lwx_gtk2u_core-3.0 -lwx_baseu_xml-3.0 -lwx_baseu_net-3.0 -lwx_baseu-3.0   /usr/lib/x86_64-linux-gnu/libusb.a
obj/Debug/BurnUSB.o: In function `print_devs(libusb_device**)':
/home/mafiafly/Documents/bbiso/BlackBoxISOBeta/BurnUSB.cpp:56: undefined reference to `libusb_get_device_descriptor'
/home/mafiafly/Documents/bbiso/BlackBoxISOBeta/BurnUSB.cpp:64: undefined reference to `libusb_get_device_address'
/home/mafiafly/Documents/bbiso/BlackBoxISOBeta/BurnUSB.cpp:64: undefined reference to `libusb_get_bus_number'
/home/mafiafly/Documents/bbiso/BlackBoxISOBeta/BurnUSB.cpp:66: undefined reference to `libusb_get_port_numbers'
collect2: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
5 error(s), 0 warning(s) (0 minute(s), 0 second(s))

我得到同样的错误libusb.alibusb.so

标签: c++linuxgcccodeblocks

解决方案


推荐阅读