c++ - 使用代码块在 Linux 上使用 C++ 中的地址获取 USB 大容量存储设备
问题描述
我是整个 linux 和 c/c++ 开发世界的新手,我正在尝试将我的一个 Windows 程序移植到 Linux。我一直在弄清楚如何获取 USB 设备,例如记忆棒、连接到系统的外部硬盘驱动器以及它们的地址,以便它们可以与某些命令行实用程序一起使用。
我的开发环境:
- 操作系统:佐林操作系统 15 64 位
- IDE:代码:: 块 16
- 编译器: GCC
- 图形用户界面: 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
解决方案
推荐阅读
- java - 当版本在开放范围内时限制 Maven 依赖项的下载
- c# - 动态生成组框
- c - 用ebnf语法描述c
- reactjs - 在 Electron 应用程序中使用 Typescript 的 contextBridge.exposeInMainWorld 和 IPC:无法读取未定义的属性“发送”
- java - 如何在 Android 中使用 BroadcastReceiver onReceive 更新 UI?
- php - 在关系 Eloquent 中选择具有相同值的行
- javascript - 将元素移动到数组的前面:Javascript
- javascript - 以数组索引为键的 JSON 字段转换为数组字段
- c# - 我不能直接调用函数
- c++ - 使用 cmake 正确链接库