VS2019下libusb批量构建失败但单独构建正常问题排查
VS2019批量构建libusb时链接错误的问题分析
问题场景
在Windows 10系统上构建libusb项目,使用VS 2019打开项目.sln文件后,选择所有非ARM目标执行Batch Build时,dpfp项目出现链接错误:
Build started... ------ Build started: Project: dpfp, Configuration: Debug-MT Win32 ------ dpfp.obj : error LNK2019: unresolved external symbol _libusb_init_context@12 referenced in function _main dpfp.obj : error LNK2019: unresolved external symbol _libusb_exit@4 referenced in function _main dpfp.obj : error LNK2019: unresolved external symbol _libusb_strerror@4 referenced in function _main
但单独对dpfp项目执行构建/重建操作时,却能正常完成:
Rebuild started... 1>------ Rebuild All started: Project: libusb_static, Configuration: Debug-MT Win32 ------ 1>core.c 1>descriptor.c 1>events_windows.c 1>hotplug.c 1>io.c 1>strerror.c 1>sync.c 1>threads_windows.c 1>windows_common.c 1>windows_usbdk.c 1>windows_winusb.c 1>libusb_static.vcxproj -> C:\work\Continuum\libusb\build\v142\Win32\Debug-MT\lib\libusb-1.0.lib 2>------ Rebuild All started: Project: dpfp, Configuration: Debug Win32 ------ 2>dpfp.c 2>dpfp.vcxproj -> C:\work\Continuum\libusb\build\v142\Win32\Debug\dpfp.exe ========== Rebuild All: 2 succeeded, 0 failed, 0 skipped ==========
问题定位
这是Visual Studio批量构建的依赖解析bug,并非libusb的.sln配置问题:
- 单独构建时,VS会正确识别项目依赖关系,先编译dpfp依赖的
libusb_static对应配置版本,再编译dpfp,因此链接时能找到正确的符号; - 批量构建时,VS的依赖调度逻辑出现异常,可能跳过了对应配置的依赖项目编译,或编译顺序错乱,导致dpfp链接时找不到
libusb_static输出的符号。
该bug从VS2010版本就已存在,到VS2019仍未完全修复——本质是批量构建模式下,VS对多配置项目的依赖解析逻辑和常规构建不一致,无法正确同步依赖项目的配置与编译顺序。
临时解决办法
- 批量构建前,手动先编译所有配置下的
libusb_static项目,再执行批量构建; - 避免使用Batch Build,改为针对每个目标配置单独执行重建操作。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

