【问题标题】:CMU pocketsphinx on Mac: GCC throwing errors in stdio.hMac 上的 CMU pocketsphinx:GCC 在 stdio.h 中抛出错误
【发布时间】:2016-05-04 20:53:35
【问题描述】:

我已经在我的 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 进行编译,它仍然会引发相同的错误。任何帮助将不胜感激。

【问题讨论】:

  • 我认为你的编译器坏了,你可以尝试用 FILE 和 stdio.h 编译简单的程序,看看它是否有效。
  • 它与一个简单的文件读取程序一起工作。
  • 我还尝试使用其他编译器,如 Clang,但又遇到了同样的错误。
  • 好的,请将--verbose标志添加到gcc并提供准确的编译器输出
  • 有很多相同的重复错误,所以我将它保存在一个文本文件中并发布在 Google 驱动器中。我让它公开可见,所以请随意访问它。谢谢你。链接为:drive.google.com/open?id=0ByC-Z20h_ChaVnJBUVhrbFRWVlk

标签: macos pocketsphinx


【解决方案1】:

根据日志,您有一个额外的文件/usr/local/include/stdio.h,它不是标准的包含文件。此文件是由其他软件安装的,因此会导致问题。

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

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

【讨论】:

  • 是的,我刚刚从 usr/local/include 中删除了不必要的文件,现在它可以工作了。非常感谢!!
猜你喜欢
  • 1970-01-01
  • 2018-04-24
  • 2018-05-07
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-25
相关资源
最近更新 更多