我目前正在尝试安装NIST' sclite
,它是SCTK 2.4.0(github或newer version)的一部分。我正在Cygwin
的{{1}}上尝试安装。安装使用bash
完成。
我能够通过进行64位编译来解决make
的问题,如README末尾所述,并在我的another中详细说明SO帖子。
现在,我再次关注installation instructions并在输入file [format] not recognized
make all
有谁知道我可以做些什么来完成安装?
注意:当回答此问题时,安装在Cygwin上实际上并未完成。有些事情需要before和after,我会根据自己的进展以及下一步的问题向我发帖。
我在C ++文档中找不到关于In file included from main.cpp:20:0:
recording.h:122:36: error: template argument 2 is invalid
map<string, Filter::Filter*> filters;
^
recording.h:122:36: error: template argument 4 is invalid
make[3]: *** [makefile:59: main.o] Error 1
make[3]: Leaving directory
'/cygdrive/c/Me/programs/nist/sctk/src/asclite/core'
make[2]: *** [makefile:12: all] Error 2
make[2]: Leaving directory
'/cygdrive/c/Me/programs/nist/sctk/src/asclite'
make[1]: *** [makefile:12: all] Error 2
make[1]: Leaving directory '/cygdrive/c/Me/programs/nist/sctk/src'
make: *** [makefile:20: all] Error 2
的任何内容,并且通过克隆目录(Filter
)中的文件进行搜索,部分提供了:
$ find . -type f \( -name "*.h" -o -name "*.c" -o -name "*.cpp" \) -print0 | xargs -I'{}' -0 grep -Hn "Filter" {}
据我所知,这意味着命名空间中有一个构造函数./src/asclite/core/checker.h:26:class Checker : public Filter
./src/asclite/core/filter.cpp:19: * Abstract interface to a Filter.
./src/asclite/core/filter.cpp:25:Filter::Filter()
./src/asclite/core/filter.cpp:30:Filter::~Filter()
./src/asclite/core/filter.h:26: * Abstract interface to a Filter.
./src/asclite/core/filter.h:28:class Filter
./src/asclite/core/filter.h:32: Filter();
./src/asclite/core/filter.h:34: virtual ~Filter();
...
,Filter
。
这是&#34;代码部分&#34; Filter
filter.cpp
这是$ cat src/asclite/core/filter.cpp | tail -16
/**
* Abstract interface to a Filter.
*/
#include "filter.h" // class's header file
// class constructor
Filter::Filter()
{
}
// class destructor
Filter::~Filter()
{
}
filter.h
$ cat src/asclite/core/filter.h | tail -27
#ifndef FILTER_H
#define FILTER_H
#include "stdinc.h"
#include "speech.h"
#include "speechset.h"
/**
* Abstract interface to a Filter.
*/
class Filter
{
public:
// class constructor
Filter();
// class destructor
virtual ~Filter();
virtual bool isProcessAllSpeechSet() = 0;
virtual unsigned long int ProcessSingleSpeech(Speech* speech) = 0;
virtual unsigned long int ProcessSpeechSet(SpeechSet* ref, map<string, SpeechSet*> &hyp) = 0;
virtual void LoadFile(const string& filename) = 0;
};
#endif // FILTER_H
答案 0 :(得分:0)
(另请查看我在问题下的评论,描述kaldi
解决方案。)
注意:此问题解决后出现了另一个问题。请参阅本答案的底部以获得帮助。
我一直在努力解决这个问题,我发现答案最终正在改变我所要展示的问题(以及其他一些问题)。提醒一下,有问题的行来自文件src/asclite/core/recording.h
recording.h:122:28: error: template argument 2 is invalid
map<string, Filter::Filter*> filters;
我把它改成了
map<string, ::Filter*> filters;
我也在Filter::Filter*
第157和164行做了同样的更改(::Filter*
到src/asclite/core/recording.cpp
),结果如下:
157: map<string, ::Filter*>::iterator fi, fe;
164: ::Filter* ptr_elt = fi->second;
在寻找答案和解释时,我还发现another page有解决方案,但没有解释。
下面的解释中有一个“让我澄清”的说明,阐述了这只是安装的部分解决方案。
我首先注意到有问题的行之前和之后的声明没有命名空间和双冒号,而我们的行有Filter::Filter*
,如下所示:
$ cat src / asclite / core / recording.h |头-n 130 |尾巴-24 地图对齐器;
/**
* contain all the available Scorer
*/
map<string, Scorer*> scorer;
/**
* contain all the available Segmentors
*/
map<string, Segmentor*> segmentors;
/**
* contain all the available Filters
*/
map<string, Filter::Filter*> filters;
/**
* Database for the optimization speaker alignment
*/
SpeakerMatch* m_pSpeakerMatch;
/** the logger */
static Logger* logger;
我首先尝试删除Filter
命名空间和两个冒号(::
)。我找到了一些网站(1,2,3,...),似乎在头文件中没有名称空间和双冒号的示例。它们只在实现文件中。我删除了Filter::
(来自相关行和recording.cpp
中的其他行),但这给了我
In file included from main.cpp:20:0:
recording.h:122:28: error: template argument 2 is invalid
map<string, Filter*> filters;
^
recording.h:122:28: error: template argument 4 is invalid
在研究双引号运算符(例如here)之后,在其他解决方案的帮助下,我将所有Filter::Filter*
更改为::Filter
。
它编译了一些警告,但安装过程的其余部分工作。 让我澄清 make config
和make all
部分有效。 make test
部分中存在错误,此处另有问题详述(待询问)。但是,运行make install
会创建我需要的可执行文件。
有关前置双叉的信息,我从another SO post得到了一些帮助。在构造函数之前,两个冒号“卡在”上让我们知道它在全局范围内,即在recording.h / .cpp之外。这是必要的,因为在recording.h/.cpp
中,创建了Filter
对象的另一个Recording
方法。 (在我写作的时候,情况越来越清晰。)
$ cat src/asclite/core/recording.cpp | head -n 290 | tail -5
/**
* Filter the references and hypothesis with the availables filters.
*/
void Recording::Filter(const vector<string> & _filters)
{
$ cat src/asclite/core/recording.h | head -n 75 | tail -4
/**
* Filter the references and hypothesis with the availables filters.
*/
void Filter(const vector<string> & _filters);
我认为我们没有命名空间(即Filter
之前没有::
)的原因被解释为here on SO。在这篇文章中,给出了.cpp(实现)文件中构造函数的代码,并给出了解释:
Mems::Mems() //you don't actually need to use the class keyword in your .cpp file; just the class name, the double colon, and the method name is enough to mark this as a class method
据我了解,将Filter::Filter
放入Recording
对象的代码中会建议Filter::Filter
是Recording
对象的类方法,但这不是'这是有意义的,因为冒号之前的第一个Filter
显然将其标记为Filter
对象的类方法。
如果此解释错误或不清楚,请随时修复。
此解决方案解决了问题中的问题,但在检查安装成功之前有more to do。