ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

vosk-api Windows 依赖加载失败排查:3 档方案从止血到根治

vosk-api Windows 依赖加载失败排查:3 档方案从止血到根治 vosk-api Windows 依赖加载失败排查3 档方案从止血到根治【免费下载链接】vosk-apiOffline speech recognition API for Android, iOS, Raspberry Pi and servers with Python, Java, C# and Node项目地址: https://gitcode.com/GitHub_Trending/vo/vosk-apiWindows 10 x64 .NET 8跑官方 C# demo调用new Model()时抛出System.DllNotFoundException: 未能加载文件或程序集libvoskGo 示例里则是 The specified module could not be found。本文给出这类 vosk-api 原生库加载失败的分档修复路径适用 C#/Go/Python/Node 绑定前提是 64 位 Windows。快速自诊清单vosk-api DLL 加载失败 5 个判断点逐条回答命中 3 条以上基本就是这篇文章要修的坑进程是 64 位吗C# 项目平台目标是否为 x64而不是 32 位进程你找的文件名是不是libvosk.dllC# 与 Kotlin 绑定里核心库不叫vosk.dllDLL 是否与 exe 同目录或在运行时显式注册的搜索路径里libwinpthread-1.dll、libgcc_s_seh-1.dll、libstdc-6.dll三个依赖库是否与libvosk.dll同目录绑定包版本与原生库版本号是否同一次发布硬性前提官方仅支持 64 位 Windowscsharp/README.md 明确写道 we only support win64 and linux64 for now. No support for win32C# 绑定的 DllImport 写法见 csharp/nuget/src/VoskPINVOKE.cs模块名是libvosk找vosk.dll属于跑偏Go 绑定走 cgo 链接编译期就要 DLL 与头文件就位参考 go/example/README.md根因拆解按最好验证的顺序排1. 搜索路径不含 DLL 目录 —— 最常见30 秒可排除.NET Core 不会按系统 PATH 搜原生库只查应用基目录和显式注册过的目录。各官方绑定都是自处理Python 绑定把包目录前置进PATH并调用add_dll_directory见 python/vosk/init.pyNode 绑定前置lib/win-x86_64见 nodejs/index.js。但如果你是手工放库就必须落在 exe 同目录。如何确认把整套 DLL 临时拷到 exe 同目录再跑通了就是它。2. 依赖链缺失 —— 报错点名的是你找的库缺的是别人libvosk.dll会导入libwinpthread-1.dll线程、libgcc_s_seh-1.dll、libstdc-6.dllGCC 运行时。只拷核心库时Windows 照样报找不到指定的模块且错误信息常指向libvosk.dll非常误导。如何确认用dumpbin /dependents libvosk.dll看导入表或打开事件查看器的应用程序日志找到具体缺失的文件名。3. 32/64 位隔离 —— 最容易误判Windows 不混载 32 位与 64 位 DLL。64 位libvosk.dll被 32 位进程IDE 默认平台目标为 32 位、或勾选了优先 32 位加载直接 0xc000007b 崩溃或加载失败。官方文档明确不支持 win32这条路是死路。如何确认任务管理器查看进程位数或检查项目平台目标。分档解决方案 临时止血档全套 DLL 拷到 exe 同目录适合马上跑起来不动项目配置。局限手工操作、dotnet clean后丢失、队友无法复现。从官方发布页下载 win64 库包如vosk-win64-0.3.45.zip版本号与你使用的绑定保持同一发布线将包内全部 DLL 拷入程序输出目录重新运行程序Copy-Item .\vosk-win64-0.3.45\*.dll -Destination .\csharp\demo\bin\Debug\net8.0 根治修复档按语言选对带库的分发渠道核心思路是不手工放库改用自带原生库的分发渠道C#引用官方 wrapper 包csharp/demo/VoskDemo.csproj 里已有PackageReference IncludeVosk的现成写法平台目标设x64别用Any CPUKotlin/JVM官方绑定在 Windows 上会自动把依赖解包到临时目录见 LibVosk.kt 的unpackDll逻辑无需手工干预Go按 go/example/README.md 的方式把 DLL 与头文件放到工作目录设置VOSK_PATH后go run . -f test.wavPython/Nodepip/npm包各自内置对应平台的库并在加载时自行注册搜索路径装包即得 工程化档写进项目配置别让同事再踩一遍csproj 中锁定平台与 DLL 拷贝规则PropertyGroup PlatformTargetx64/PlatformTarget /PropertyGroup ItemGroup None Updatelibs\win64\*.dll CopyToOutputDirectoryPreserveNewest/CopyToOutputDirectory /None /ItemGroupCI 增加原生库部署与断言步骤GitHub Actions 风格- name: Deploy Vosk DLLs if: matrix.os windows-latest run: | # 从官方发布页下载 vosk-win64-version.zip 并解压 Copy-Item .\vosk-win64\*.dll -Destination .\tests\bin\Release if ((Get-ChildItem .\tests\bin\Release\libvosk.dll, .\tests\bin\Release\libwinpthread-1.dll).Count -lt 2) { exit 1 }版本锁定绑定包与原生库版本号绑定在同一发布线升级时一起动修复验证确认 vosk-api 库已加载的最小动作✅ 最小验证跑官方 C# demo先按 csharp/README.md 的说明解压好 model 目录与测试音频cd csharp/demo dotnet run成功的样子控制台输出一行包含text字段的 JSON即test.wav的识别结果进程正常退出。若仍是DllNotFoundException回到自诊清单逐项核对若提示 Failed to create a model说明库已加载成功、问题转移到模型路径不在本文范围。长效预防平台目标x64写进项目文件而不是个人 IDE 设置克隆仓库即继承CI 制品中加入原生库文件断言逻辑见上文代码块缺文件就让构建红掉而不是等某人本地跑挂别用往全局 PATH 里塞目录解决 DLL 搜索库放应用目录或专用VOSK_PATH各环境才可复现收尾问题本质是 32/64 位隔离与 DLL 搜索顺序名字libvosk.dll、目录exe 同目录、依赖链三个从库都对加载自然通。更多细节可查官方 FAQ 与本站仓库的 issue 渠道。【免费下载链接】vosk-apiOffline speech recognition API for Android, iOS, Raspberry Pi and servers with Python, Java, C# and Node项目地址: https://gitcode.com/GitHub_Trending/vo/vosk-api创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表