OSX下libusb调用libusb_get_device_list返回设备数量异常问题
解决libusb_get_device_list返回设备数异常的问题
排查方向及修复方案
显式初始化libusb上下文
你当前代码中context直接传NULL使用默认上下文,可能存在初始化不完整或资源竞争问题。建议显式初始化并管理上下文生命周期:libusb_context *context = NULL; libusb_device **list = NULL; int rc, count; // 初始化上下文 rc = libusb_init(&context); if (rc != LIBUSB_SUCCESS) { // 处理初始化失败逻辑 return; } count = libusb_get_device_list(context, &list); // 设备列表使用完毕后必须释放 libusb_free_device_list(list, 1); // 退出前销毁上下文 libusb_exit(context);完善沙盒USB权限配置
仅开启沙盒USB权限还不够,需在Info.plist中添加具体的设备匹配规则。若要访问所有USB设备,添加以下配置:<key>USB</key> <array> <dict> <key>idVendor</key> <integer>0</integer> <key>idProduct</key> <integer>0</integer> </dict> </array>另外,沙盒环境下系统权限验证可能存在延迟,可尝试在应用启动后延迟1-2秒再调用
libusb_get_device_list。确保资源正确释放
若多次调用libusb_get_device_list但未调用libusb_free_device_list释放资源,会导致内存泄漏或设备列表缓存异常,务必保证每次获取列表后都完成释放操作。检查libusb版本兼容性
旧版本libusb在macOS沙盒环境下可能存在兼容性问题,建议升级至最新稳定版。可通过Homebrew更新:brew upgrade libusb排除调试环境干扰
尝试在终端直接运行应用(而非通过Xcode启动),验证是否能获取正确设备数,排除Xcode调试环境的权限限制影响。
内容的提问来源于stack exchange,提问作者fra87kdk
相关产品推荐
相关产品推荐

