k2-fsa / sherpa-onnx

Speech-to-text, text-to-speech, speaker diarization, and VAD using next-gen Kaldi with onnxruntime without Internet connection. Support embedded systems, Android, iOS, Raspberry Pi, RISC-V, x86_64 servers, websocket server/client, C/C++, Python, Kotlin, C#, Go, NodeJS, Java, Swift, Dart, JavaScript, Flutter, Object Pascal, Lazarus, Rust
https://k2-fsa.github.io/sherpa/onnx/index.html
Apache License 2.0
3.72k stars 431 forks source link

有关生成动态链接库dll的问题 #1457

Closed J1angX1n closed 1 month ago

J1angX1n commented 1 month ago

想尝试把这个语音模块集成到虚幻5中去,但是把相关的示例代码和在 https://huggingface.co/csukuangfj/sherpa-onnx-libs/tree/main/win64 下载的预编译的库(lib和dll,如下图)整理出来放入ue项目后编译会报错, DevCap_20241023_163308 DevCap_20241023_163329

ue编译报的错误大多是未定义的符号,比如下面这个

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2019 unresolved external symbol SherpaOnnxCreateOnlineRecognizer referenced in function "public: void __cdecl USpeachRecognitionComponent::InitParaformer(void)" (?InitParaformer@USpeachRecognitionComponent@@QEAAXXZ)

我猜可能是缺少dll就自己按照doc上的加了-DBUILD_SHARED_LIBS=ON 进行编译,出来的结果和网站上给的预编译的库一样还是只有少数几个lib有对应的dll DevCap_20241023_163729

但是我在文档网站上下载1.9.12这个版本的预编译库里面确实lib都是有对应的dll的,而且用这个版本的lib和dll虚幻5那边可以编译通过 DevCap_20241023_163909 DevCap_20241023_164057 DevCap_20241023_164739

我可能对这方面缺乏了解,如果新版本的代码要生成dll的话是需要修改什么配置吗

平台 win10/win11 ue5.3.2 已经安装vs2022

csukuangfj commented 1 month ago

如果你要用动态库,即 dll, 那么,你只需要依赖下面两个 .dll

如果你要依赖静态库,那么你需要用很多个 .lib 文件,并且,这些 .lib, 是有顺序的。 具体链接顺序,请参考 https://github.com/k2-fsa/sherpa-onnx/blob/ceb69ebd946a6f022d8349ba793d173fd0f5d204/cmake/sherpa-onnx-static.pc.in#L25

以你的截图为例,你的第43行,写的是 ucd.lib, 你把它放在第一个,应该是不对的。第一个应该要放 sherpa-onnx-c-api.lib

csukuangfj commented 1 month ago

还有,看代码,你用的是.cs, 我们有提供 c# 的 nuget 包,你是否可以直接用?

如果你不能直接用,你去用我们提供的 .cs api, 是否可以?

具体代码在 https://github.com/k2-fsa/sherpa-onnx/tree/master/scripts/dotnet

J1angX1n commented 1 month ago

如果你要用动态库,即 dll, 那么,你只需要依赖下面两个 .dll

  • sherpa-onnx-c-api.dll
  • onnxruntime.dll

如果你要依赖静态库,那么你需要用很多个 .lib 文件,并且,这些 .lib, 是有顺序的。 具体链接顺序,请参考

https://github.com/k2-fsa/sherpa-onnx/blob/ceb69ebd946a6f022d8349ba793d173fd0f5d204/cmake/sherpa-onnx-static.pc.in#L25

以你的截图为例,你的第43行,写的是 ucd.lib, 你把它放在第一个,应该是不对的。第一个应该要放 sherpa-onnx-c-api.lib

ue就模块引用这部分是c#,我会的c#也就这点了😂,不过按照方法1我用这俩文件的dll+lib总算编译通过了,感谢大佬指点