Cygwin下安裝Kaldi

@bruce  November 27, 2019

在Windows下安装Cygwin

安装Devel、Perl、PHP、Python三个安装包。

在Cygwin下安装apt-cyg

Cygwin下的apt-cyg是软件安装工具,相当于Ubuntu下的apt-get命令。apt-cyg其实就是一个脚本文件。先下载apt-cyg下来,然后直接放到/bin目录下就可以。然后在cygwin的窗口下输入下面的指令

chmod +x /bin/apt-cyg      #更改apt-cyg的文件属性
apt-cyg -m http://mirrors.163.com/cygwin   #设置apt-cyg的镜像地址以获取需要安装的程序包

或者也可以打开apt-cyg,直接修改mirrors参数

function findworkspace()
{
  # default working directory and mirror
  #mirror=ftp://mirror.mcs.anl.gov/pub/cygwin
  mirror=http://mirrors.163.com/cygwin
}
apt-cyg update                #更新apt-cyg
cygwin所有包列表

下载Kaldi安装包

git clone https://github.com/kaldi-asr/kaldi.git kaldi

Kaldi安装前的配置

  • 查了一下Cygwin下其实没有build-essential,build-essential其实是一个打包开发包,可能包括make、automake、g++、gcc、libstc++-dbg、libstc++-dev等,实际上我们在第一步Cygwin安装中全选了“Devel”,已经把这些包全部安装好了。
  • linux平台下可以直接安装libatlas库,但是在Windows下没有libatlas库,Windows下的替代库是lapack库,即liblapack包,可以直接执行指令来安装lapack包所有文件
apt-cyg install lapack
  • 安装所有需要的包
apt-cyg install libtool apt-cyg install autoconf
apt-cyg install wget apt-cyg install perl apt-cyg install subversion
apt-cyg install build-essential
apt-cyg install gfortran
apt-cyg install libatlas-dev
apt-cyg install libatlas-base-dev
apt-cyg install zlib
apt-cyg install liblbfgs-devel liblbfgs1 tcl-devel #安装srilm需要

安装tools

cd tools
make

运行大概5分钟左右,报错:

libtool: compile: g++ -DHAVE_CONFIG_H -I./../include -MT minimize.lo -MD -MP -MF .deps/minimize.Tpo -c minimize.cc -DDLL_EXPORT -DPIC -o .libs/minimize.o
.libs/minimize.o: too many sections (34910)
Fatal error: can't write .libs/minimize.o: File too big

报错的原因是没有对g++做优化,在说解决方案之前先说一下libtool、g++、.o/.lo/.a/.la文件的内容。 1. libtool 是一个通用库支持脚本,将使用动态库的複杂性隐藏在统一、可移植的接口中,也就是说,你可以通过如下所示的标准方法,在不同平台上创建并调用动态库,我们 可以认爲libtool是gcc的一个抽象,也就是说,它包装了gcc或者其他的任何编译器,用户无需知道细节,只要告诉libtool说我需要要编译哪 些库即可,并且,它只与libtool文件打交道,例如lo、la爲后缀的文件。 2. g++几个常用的 编译选项: - O数字(大写的O+数字):编译器的优化选项的4个级别,-O0表示没有优化,-O1爲缺省值,-O3优化级别最高(我用了O3进行优化后,减小.lo文件的大小) - c:只激活预处理,编译,和彙编,也就是他只把程序做成obj文件  - E:只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面. - o:制定目标名称 - Idir:如果使用-I制定了目录,他回先在你所制定的目录查找,然后再按常规的顺序去找 3. .o/.lo/.a/.la文件的区别: - .o: 目标文件; - .a: 静态库,起始就是把若干个.o文件打了包; - .lo: libtool生成的目标文件,其实就是.o文件加入了一些文本信息而已; - .la: libtool生成的库文件,是个文本文件,记录同名动态库和静态库的相关信息。 4. 解决方案 进入tools\openfst-1.6.7\src\script,打开Makefile,在第411行添加 -O3 就可以了。

$(LTCXXCOMPILE) -O3 -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<

安装kaldi

configure

进入 src目录,输入./configure,运行后会有报错提示,但是最后又是Success的,定位是check\_for\_slow\_expf 函数出了问题。

function check_for_slow_expf {
    cd probe
    rm -f exp-test //删除exp-test目录及其子目录,-f表示无需通知,强行删除
    echo "Here Ok1?"
    make -f Makefile.slow_expf 1>/dev/null //这一句话报错
    echo "Here Ok2?"
    ./exp-test //进入exp-test目录
    if [ $? -eq 1 ]; then //$?表示最后运行的命令的结束代码(返回值)
        echo "*** WARNING: expf() seems to be slower than exp() on your machine. This is a known bug in old versions of glibc. Please consider updating glibc. ***"
        echo "*** Kaldi will be configured to use exp() instead of expf() in base/kaldi-math.h Exp() routine for single-precision floats. ***"
        echo "CXXFLAGS += -DKALDI_NO_EXPF" >> ../kaldi.mk
    fi
    cd ..
}

下面这个链接也同样出现了我的问题,但有人回答说这个错误并非致命错误,可以暂时忽略,所以我们就先把这个问题先放放,先执行下面的指令。

make

make depend & make

添加新评论