Unity集成Vosk项目报错:找不到libvosk DLL求助
DllNotFoundException: libvosk assembly: type: member:(null)
Vosk.Vosk.SetLogLevel (System.Int32 level) (at :0)
VoskSpeechToText+d__30.MoveNext () (at <51d31056a8e1447b80dc54febfe062d4>:0)
UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at :0)
以下是针对该问题的具体解决步骤:
匹配平台与CPU架构:Vosk的
libvoskDLL分不同平台和架构版本(如Windows x86_64、Mac Intel/Apple Silicon、Android ARM64等),确保你使用的DLL和当前Unity的目标平台、CPU架构完全一致。同时将DLL放在对应平台的Plugins子目录下(如Plugins/Windows、Plugins/MacOS),Unity会自动加载对应平台的文件。配置DLL导入设置:在Unity编辑器中选中
libvosk.dll,在Inspector面板中:- 勾选对应目标平台(如Standalone Windows、MacOS);
- 选择正确的CPU架构(如Windows选x86_64,MacOS根据芯片选Intel或Apple Silicon);
- 确保
Include in Build选项处于勾选状态,避免打包时遗漏DLL。
检查依赖库完整性:
- Windows平台:
libvosk依赖Visual C++ Redistributable Runtime,若系统未安装,需下载对应版本的VC Redist安装包并安装;也可将依赖的vcruntime140.dll等文件和libvosk.dll放在同一目录。 - Mac平台:用终端执行
otool -L libvosk.dylib查看依赖库,确保所有依赖项都存在于系统或项目Plugins目录中。
- Windows平台:
验证DLL版本与完整性:重新从Vosk官方渠道下载对应版本的
libvoskDLL,确保与项目中Vosk的C#绑定版本一致(比如C#包是0.3.45,DLL也要对应同版本),替换项目中可能损坏或版本不匹配的文件。调整脚本调用时机:错误触发于
Vosk.SetLogLevel调用,可能是DLL未完成加载就执行了API调用。将Vosk初始化代码移至Start()方法中(而非Awake()),或用try-catch包裹初始化逻辑,避免提前调用导致加载失败。清理Unity缓存:删除项目根目录下的
Library文件夹,重新打开项目让Unity重新导入所有资源,解决缓存导致的DLL加载异常问题。
内容的提问来源于stack exchange,提问作者NeTBoy

