Получите запоминающие устройства USB с адресами в C ++ на Linux с помощью кодовых блоков - PullRequest
0 голосов
/ 03 марта 2020

Я новичок во всем мире разработки linux и c / c ++ и пытаюсь перенести одну из моих windows программ на Linux. Я не могу понять, как получить USB-устройства, такие как карты памяти, внешние жесткие диски, подключенные к системе, а также их адреса, чтобы их можно было использовать с некоторыми утилитами командной строки.

Моя среда разработки:

  • ОС: Zorin OS 15 64-битная
  • IDE: Код :: Блоки 16
  • Компилятор: G CC
  • GUI: WxWidgets 3
  • Язык разработки: C ++

Я знаю, на 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.a и libusb.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.a и libusb.so

...