Я новичок во всем мире разработки 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