M2 Mac用librealsense调用RealSense相机时libusb段错误求助
解决思路
1. 排查架构兼容性问题
- M2 Mac为ARM64架构,先确认安装的libusb是原生ARM64版本,而非x86_64转译版本。执行命令
lipo -info /usr/local/lib/libusb-1.0.0.dylib(替换为你的libusb实际路径),输出需包含arm64。 - 若用Homebrew安装libusb,确保Homebrew是ARM64版本(M2默认应为该版本,若之前装过x86版本,需重新安装到
/opt/homebrew路径下)。
2. 验证librealsense的编译/安装配置
- 若源码编译librealsense,编译时需指定ARM64架构,cmake阶段添加参数
-DCMAKE_OSX_ARCHITECTURES=arm64,避免生成x86架构代码。 - 若通过包管理器安装,确认安装的是ARM版本的librealsense,而非x86版本。
3. 检查libusb上下文初始化状态
- EXC_BAD_ACCESS(address=0x28)通常指向未初始化指针访问,需确认
_ctx是否完成正确初始化:- 检查
libusb_init(&_ctx)是否在libusb_get_device_list之前执行且返回成功(返回值为0)。 - 调试时查看
_ctx的值,若为NULL或野指针,说明上下文初始化失败,需排查初始化阶段的权限或依赖问题。
- 检查
4. 确认USB设备权限
- M2 Mac的USB设备权限可能导致异常,先尝试用
sudo运行程序,若崩溃消失,说明是权限不足:- 打开系统设置→隐私与安全性→USB,确保你的程序(或VS Code,若调试时运行)在权限列表中且已开启访问权限。
- 可将RealSense相机的VID/PID添加到系统允许列表,解决长期权限问题。
5. 调整依赖版本
- 部分libusb版本在M2 Mac上存在兼容性bug,尝试降级到1.0.25版本或升级至最新稳定版。
- 同步调整librealsense版本,确保与当前libusb版本兼容,比如切换到LTS版本或最新稳定版。
6. 编写最小化测试程序定位问题
- 脱离librealsense,写一个纯libusb测试程序,验证核心调用是否正常:
编译运行:#include <libusb-1.0/libusb.h> #include <stdio.h> int main() { libusb_context *ctx = NULL; int ret = libusb_init(&ctx); if (ret != 0) { printf("libusb init failed: %d\n", ret); return 1; } libusb_device **list; ssize_t count = libusb_get_device_list(ctx, &list); printf("Device count: %zd\n", count); libusb_free_device_list(list, 1); libusb_exit(ctx); return 0; }g++ test.cpp -lusb-1.0 -o test && ./test。若程序崩溃,说明问题出在libusb或系统配置;若正常,再逐步加入librealsense代码定位具体触发点。
内容的提问来源于stack exchange,提问作者Finn
相关产品推荐
相关产品推荐

