sclite(SCTK)安装,文件无法识别,文件格式无法识别,Cygwin

时间:2018-05-10 17:46:51

标签: c++ c makefile cygwin

我目前正在尝试安装NIST' sclite,它是SCTK 2.4.0(githubnewer version)的一部分。我正在Cygwin的{​​{1}}上尝试安装。安装使用bash完成。

我做了什么

我为安装创建了一个目录并导航到该目录

make

(您可能需要mkdir sctk2.4.0 cd sctk2.4.0 。)

我从$ cd /path/to/dir/sctk2.4.0

克隆了该项目
github

导航到基础文件夹

git clone https://github.com/chinshr/sctk.git

然后我开始按照INSTALL文件中的说明进行操作。

运行

cd sctk

工作正常,但在输入后

make config

我得到了

之后的输出
make all

我已查看this SO post,但我已确定(mkdir -p bin) (cd src; make all) make[1]: Entering directory '/cygdrive/c/David/programs/sctk2.4.0/sctk/src' (cd asclite; make all) make[2]: Entering directory '/cygdrive/c/David/programs/sctk2.4.0/sctk/src/asclite' (cd core; make all) make[3]: Entering directory '/cygdrive/c/David/programs/sctk2.4.0/sctk/src/asclite/core' g++ -o asclite -g -Os alignment.o segment.o sgml_reportgenerator.o alignedsegmentiterator.o reportgenerator.o speechset.o segmentsgroup.o logger.o tokenalignment.o sgml_generic_reportgenerator.o recording.o statistics.o compressedlevenshteinmatrix.o segmentor.o id.o trntrn_segmentor.o linestyle_inputparser.o inputparser.o levenshteinmatrix.o levenshtein.o uemfilter.o speakermatch.o spkrautooverlap.o graphalignedsegment.o rawsys_reportgenerator.o graphalignedtoken.o timedobject.o stt_scorer.o aligner.o arraylevenshteinmatrix.o graph.o main.o trn_inputparser.o alignedspeech.o token.o alignedsegment.o graph_coordinate.o rttm_inputparser.o scorer.o properties.o ctmstmrttm_segmentor.o filter.o speech.o alignedspeechiterator.o stm_inputparser.o checker.o ctm_inputparser.o lzma/LzFind.o lzma/LzmaEnc.o lzma/Alloc.o lzma/LzmaLib.o lzma/LzmaDec.o -lm alignment.o: file not recognized: File format not recognized collect2: error: ld returned 1 exit status make[3]: *** [makefile:62: asclite] Error 1 make[3]: Leaving directory '/cygdrive/c/David/programs/sctk2.4.0/sctk/src/asclite/core' make[2]: *** [makefile:12: all] Error 2 make[2]: Leaving directory '/cygdrive/c/David/programs/sctk2.4.0/sctk/src/asclite' make[2]: *** [makefile:12: all] Error 2 make[2]: Leaving directory '/cygdrive/c/David/programs/sctk2.4.0/sctk/src' make: *** [makefile:20: all] Error 2 文件未损坏。为了以防万一,我尝试了一些alignment.o,甚至从make clean重新克隆了项目,但我仍然遇到同样的错误。

任何人都可以帮我完成此安装,或者至少可以进入下一步吗?

系统详细信息

github

注意

我问这个问题,然后回答我自己的问题。 (我喜欢StackOverflow允许我们这样做。)希望这将使人们更容易帮助我解决我在安装中遇到的问题。

讨论了我遇到的下一个问题here。你可以在这个问题的答案中看到下一个问题。

3 个答案:

答案 0 :(得分:0)

(请参阅$ uname -a CYGWIN_NT-6.1 CAP-D-ENG-INT3 2.10.0(0.325/5/3) 2018-02-02 15:16 x86_64 Cygwin $ bash --version GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin) ... $ gcc --version gcc (GCC) 6.4.0 ... $ g++ --version g++ (GCC) 6.4.0 ... $ make --version GNU Make 4.2.1 Built for x86_64-unknown-cygwin ... $ systeminfo | sed -n 's/^OS\ *//p' Name: Microsoft Windows 7 Enterprise Version: 6.1.7601 Service Pack 1 Build 7601 Manufacturer: Microsoft Corporation Configuration: Member Workstation Build Type: Multiprocessor Free 解决方案问题的评论。)

此问题的解决方案位于kaldi,正如解决方案所常见的那样。 注意:此问题解决后出现了另一个问题。请参阅本答案的底部以获得帮助。

以下是我用来从README获取相关信息的命令。

README

以下是相关信息

cat README | tail -13

所以,我转到列出的 64 bits Compilation With big alignments, sctk needs to be compiled in 64 bits. By default, the C/C++ software are compiled in 32 bits with the options (-Os) but can be compiled in 64 bits, -m64 is added to the CFLAGS variable in: src/asclite/core/makefile src/asclite/test/makefile src/rfilter1/makefile src/sclite/makefile Example of CFLAGS: For OSX 10.4+: -fast -m64 -arch x86_64 -arch ppc64
makefile除外,见下文)并更改了代码,用rfilter1替换每个-Os。仅对列出的makefile执行此操作。我将举例说明其中一个列出的文件,但请注意,您必须为其他文件执行此操作。

-m64

当文件打开时,我找到了一行:

cd sctk
vim src/asclite/core/makefile

我改为

CFLAGS = -g -Os

(按下" CFLAGS = -g -m64 "进入i模式,进行更改,按下" INSERT",然后按& #34; Esc"(写入和退出)后跟" :wq")

我在所有列出的文件中进行了更改Enter,因为该文件中没有src/rfilter1/makefile。这最终变得很重要,因为如果我根本没有更改此文件,安装将无法正常工作。

完成此操作后,我运行-Os,但我没有运行make clean,因为这会撤消我们刚才所做的更改。我直接去了:

make config

这让我们超越了以前的状态。

问题得到了解决,但还有另一个问题:

make all

我问过here

答案 1 :(得分:0)

这是“ EASIER”解决方案。

以下是我所谓的“ kaldi解决方案”的详细信息。现在,这只是没有详细信息的命令列表。如此处所示,这些命令将在sclite-2.4.10$HOME)目录下安装一个~目录:

$ cd
$ git clone https://github.com/kaldi-asr/kaldi.git
$ cd kaldi/tools
$ extras/check_dependencies.sh
$ make -j $(nproc --all)
$ cp -R sctk-2.4.10 ~/
$ cd
$ rm -rf kaldi
$ cd sctk-2.4.10/
$ cp $HOME/.bashrc "${HOME}/.bashrc.$(date +%Y%m%d-%H%M%S).bak"
$ echo -e "\n\n## Allow access to sclite, rfilter, etc" >> $HOME/.bashrc
$ echo 'export PATH='"$(pwd)/bin"':$PATH' >> $HOME/.bashrc
$ source ~/.bashrc

有关如何在Windows上使用它的详细信息,请参见this问题/答案。

答案 2 :(得分:0)

更简便的解决方案-利用sclite的新的编辑版本

以防有人发现此处的答案有用。我知道这里没有投票,但是我只是拿了一个奖杯告诉我这是我的第一个获得1000次观看的问题,因此我将更新答案以显示完成工作的最简单方法。

TL; DR

https://www.nist.gov/itl/iad/mig/tools

https://github.com/usnistgov/SCTK

% cd /the/dir/where/i/want/to/install
% git clone https://github.com/usnistgov/SCTK.git
% cd SCTK

git master自述文件(带引号)中加上了一些评论。

% make config

% sed -i 's#[-]Os#-m64#g' src/asclite/core/makefile

% sed -i 's#[-]Os#-m64#g' src/asclite/test/makefile

% sed -i 's#[-]Os#-m64#g' src/sclite/makefile

% make clean

% ## Possible edit to the `rfilter1 makefile`, which are
% ## described at the end of the answer but were not necessary
% ## for me.

% make all

% make check

% make install

% make doc

我还将可执行文件的目录添加到我的PATH并通过man命令使文档可用。

% pwd
/the/dir/where/i/want/to/install/SCTK
% # back up your `.bashrc`
% cp $HOME/.bashrc "${HOME}/.bashrc.$(date +%Y%m%d-%H%M%S).bak"
% # persistent path changes
% echo -e "\n\n## Allow access to sclite, rfilter, etc" >> $HOME/.bashrc
% # your machine might use something other than `export` for this. CHECK!
% echo 'export PATH='"$(pwd)/bin"':$PATH' >> $HOME/.bashrc
% # make changes availabel this session
% source ~/.bashrc
% # man stuff
% cd doc
% cp -r ./* /usr/man/man1

TL的末尾; DR部分


详细信息

自从我于2018年5月发布此内容以来,终于对该软件进行了一些更新:

Updates in Fall 2018, first since 2015.

我于2018年5月发布了问题,并于2018年秋季进行了更新。这些更新部分地解决了我在这里遇到的问题,但是README和一些makefiles中的某些信息是在这里有用的提示。

可以通过-Os找到32到64位的问题(将-m64更改为README,如上所述)。

% cat -n README.md | grep -A 4 "64 bits Compilation"
    61  **64 bits Compilation**:
    62  With big alignments, sctk needs to be compiled in 64 bits. By default, the C/C++ software are compiled in 32 bits with the options (`-Os`) but can be compiled in 64 bits. To do so, `-m64` is added to the CFLAGS variable in `src/asclite/core/makefile`, `src/asclite/test/makefile`, `src/rfilter1/makefile` and `src/sclite/makefile`.
    63
    64  Example of `CFLAGS` for OSX 10.4+: `-fast -m64 -arch x86_64 -arch ppc64`
    65

第62行带有自动换行

具有很大的一致性,因此sctk需要以64位进行编译。默认情况下,C / C ++软件使用选项(-Os)以32位编译,但是可以以64位编译。为此,将-m64添加到以下位置的CFLAGS变量中: src/asclite/core/makefilesrc/asclite/test/makefilesrc/rfilter1/makefilesrc/sclite/makefile

由于-Os中没有src/rfilter1/makefile,因此我没有进行任何更改。

我能够顺利完成安装(包括没有失败的测试)。这是我的系统信息。

$ uname -a
CYGWIN_NT-10.0 MyMachine 3.0.7(0.338/5/3) 2019-04-30 18:08 x86_64 Cygwin
$ bash --version | head -n 1
GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)
$ gcc --version | head -n 1
gcc (GCC) 7.4.0
$ g++ --version | head -n 1
g++ (GCC) 7.4.0
$ make --version | head -n 2
GNU Make 4.2.1
Built for x86_64-unknown-cygwin
$ systeminfo | sed -n 's/^OS\ *//p'
Name:                   Microsoft Windows 10 Enterprise
Version:                10.0.17134 N/A Build 17134
Manufacturer:           Microsoft Corporation
Configuration:          Member Workstation
Build Type:             Multiprocessor Free

但是,似乎其他一些试图在Cygwin上进行编译的人遇到了问题。这是来自README

的更多信息
% grep "Special Note to Cygwin users" README.md
*Special Note to Cygwin users:* it has been reported that compilation of `rfilter1` can fail in some case, please read the OPTIONS part of the `rfilter1/makefile` and adapt accordingly before retrying compilation.

好吧,让我们来看看makefile的{​​{1}},看看其中一些人可能需要做些什么。

rfilter1

因此,如果您遇到% head -n 15 src/rfilter1/makefile | tail -7 ########################### Options for compilation ######################### ####### If you have an very new version of GCC, the strcmp* family of functions ####### is included in the distribution. Changing the value of OPTIONS to ####### be blank will diable the use of supplied versions of these functions. ####### In particular, this behavior has been noted on some versions of cygwin OPTIONS=-DNEED_STRCMP=1 $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) 编译问题,请将未注释的行更改为

rfilter1