Mac上的CMU pocketsphinx:GCC在stdio.h中抛出错误

时间:2016-05-04 20:53:36

标签: macos pocketsphinx

我已经在我的mac上安装了sphinxbase和pocketsphinx的最新版本。在这个CMU中site 他们提供了一个简单的hello world代码来测试安装的有效性。代码如下:

#include <pocketsphinx.h>

int main(int argc, char *argv[])
{
    ps_decoder_t *ps = NULL;
    cmd_ln_t *config = NULL;

    config = cmd_ln_init(NULL, ps_args(), TRUE,
             "-hmm", MODELDIR "/en-us/en-us",
             "-lm", MODELDIR "/en-us/en-us.lm.bin",
             "-dict", MODELDIR "/en-us/cmudict-en-us.dict",
             NULL);

    return 0;
}

我必须在下面输入此命令才能使用GCC进行编译

gcc -o hello_ps hello_ps.c \
-DMODELDIR=\"`pkg-config --variable=modeldir pocketsphinx`\" \
`pkg-config --cflags --libs pocketsphinx sphinxbase`

其中 pkg-config 会关注包含和库路径。

但是编译会在 stdio.h 文件中返回以下错误(pocketsphinx.h包含stdio.h)。

Restrict requires a pointer or reference (int is invalid)

在几个地方也是

Unknown typename _FILE (Expanded from macro 'FILE')

我浏览了stdio.h文件并找到了相应的语句,我不知道它的作用。我了解 restrict 关键字不是C ++标准的一部分,但即使使用 c99 进行编译,它仍会引发相同的错误。任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

根据日志,您有一个额外的文件let GET_LISTING = "Listing/GetDetails?deviceid=%@&listingid=%@" let url = SERVER_URL + String.localizedStringWithFormat(GET_LISTING, deviceId, String(listingId)) ,它不是标准的包含文件。此文件是由其他一些软件安装的,会导致问题。

您需要从系统中删除有问题的stdio.h(可能还有其他额外的标题)。

正确的stdio.h位于/usr/local/include/stdio.h