You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下CMake构建Makefile时libusb链接错误排查求助

解决Windows MinGW环境下libusb链接未定义引用问题

问题分析

你遇到的undefined reference错误是链接器找不到libusb函数的实现代码,核心原因是当前配置的.dll.a是导入库,必须配套同名的libusb-1.0.dll才能工作,但你只有MSYS版本的msys-usb-1.0.dll,同时CMake未正确关联到可用的libusb库文件。

快速解决步骤

1. 切换到静态库链接(最稳妥方案)

静态库libusb-1.0.a包含了libusb的全部代码,编译时会直接打包进你的程序,无需依赖外部DLL:

  • 打开CMake GUI,点击File -> Delete Cache清空旧配置缓存
  • 在CMake变量列表中找到LIBUSB_1_LIBRARY,将其值改为libusb-MinGW/lib目录下的libusb-1.0.a
  • 确认LIBUSB_1_INCLUDE_DIR指向libusb-MinGW/include/libusb-1.0目录
  • 点击Configure,选择MinGW Makefiles(注意选MinGW原生版本,不是MSYS的),配置完成后点击Generate重新生成Makefile

2. 重新编译

打开MinGW终端(不要用MSYS终端),进入你的构建目录,执行命令:

make clean
make

备选方案:适配现有DLL(若需动态链接)

如果你坚持用动态链接,可按以下操作:

  • 找到libusb-MinGW/bin下的msys-usb-1.0.dll,复制一份并重命名为libusb-1.0.dll
  • 将改名后的DLL放到两个位置:项目构建目录、MinGW的bin目录(如C:\mingw64\bin)
  • 回到CMake GUI,将LIBUSB_1_LIBRARY设置为libusb-MinGW/lib下的libusb-1.0.dll.a,重复上述配置、生成、编译步骤

你遇到的错误信息参考

C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\freenect.dir/objects.a(tilt.c.obj):tilt.c:(.text+0x4b): undefined reference to `libusb_bulk_transfer'
C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\freenect.dir/objects.a(tilt.c.obj):tilt.c:(.text+0xbf): undefined reference to `libusb_error_name'
C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\freenect.dir/objects.a(tilt.c.obj):tilt.c:(.text+0x1cc): undefined reference to `libusb_bulk_transfer'

内容的提问来源于stack exchange,提问作者hugo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 10:52:05