funasr适配windows之大坑静态库中的静态实例不初始化

昨天晚上funasr团队的大佬反馈windows下 funasr-wss-server 加载lm模型失败,今天一大早,我就开始研究为啥加载失败,先linux测试一下了一下,发现也是加载lm模型失败,我回退到适配 windows之前的版本测试,是正常加载的,唯一的修改就是把openfst由动态库改成了静态库,我改回编译动态库,加载正常。通过跟踪代码发现静态库的时候vector没有FstRegister,为啥没注册呢,又在哪里注册的呢,通过跟踪动态库的调用堆栈,发现是初始化的时候注册的。静态库的时候不会调用初始化函数。具体代码在 fst-types.cc 里面。 就是编译成静态库,fst-types.cc里面的静态实例 不会构造,动态库会构造,第一次知道动态库和静态库还有这个区别。 因为windows默认不会导出函数,必须静态库使用openfst, 怎么让 fst-types.cc 里面的静态类实例化呢,最简单的方法就是 在 funasr 找个文件去include fst-types.cc 。编译器是否有这样的参数,来控制静态库 里面的静态实例 初始化呢,搜索了很久也没找到。 看似小问题,却花费了一整天来搞清楚。

你可能感兴趣的:(语言识别,c++)