在 Mac OSX 上安装 flite 时出错

Posted

技术标签:

【中文标题】在 Mac OSX 上安装 flite 时出错【英文标题】:Error installing flite on Mac OSX 【发布时间】:2014-04-11 01:05:39 【问题描述】:

我已经下载了the latest source distribution of flite,然后按照通常的过程进行安装。

$ ./configure
$ make
$ sudo make install

但是,当我尝试将库安装到我的系统时遇到了一个奇怪的错误。

$ sudo make install
Installing
mkdir -p /usr/local/bin
mkdir -p /usr/local/lib
mkdir -p /usr/local/include/flite
/usr/bin/install -c -m 644 include/*.h /usr/local/include/flite
/usr/bin/install -c -m 755 ../bin/flite_time /usr/local/bin
cp -pd ../build/i386-darwin13.1.0/lib/libflite_cmu_us_kal.a ../build/i386-darwin13.1.0/lib/libflite_cmu_time_awb.a ../build/i386-darwin13.1.0/lib/libflite_cmu_us_kal16.a ../build/i386-darwin13.1.0/lib/libflite_cmu_us_awb.a ../build/i386-darwin13.1.0/lib/libflite_cmu_us_rms.a ../build/i386-darwin13.1.0/lib/libflite_cmu_us_slt.a ../build/i386-darwin13.1.0/lib/libflite_usenglish.a ../build/i386-darwin13.1.0/lib/libflite_cmulex.a ../build/i386-darwin13.1.0/lib/libflite.a /usr/local/lib
cp: illegal option -- d
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory
make[1]: *** [install] Error 64
make: *** [install] Error 2

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

Mac 使用的 BSD cp 与大多数 linux 发行版的 GNU cp 之间存在一些细微差别。

考虑以下来自 linux 机器的 man cp 的 sn-p:

   -d     same as --no-dereference --preserve=links

   -P, --no-dereference
          never follow symbolic links in SOURCE

   --preserve[=ATTR_LIST]
          preserve  the  specified  attributes (default: mode,ownership,timestamps), if possible additional attributes: context,
          links, xattr, all

所以基本上它试图做的是“复制以下路径,如果它们是链接,只需复制链接,而不是基础文件。”

p 选项存在于 Mac 下,相当于 linux 的行为。但是,d 选项不存在。

我试图找出一种方法来模仿 Mac cp 的“复制链接,而不是目标”的行为,据我所知,没有令人愉快的方法。

幸运的是,有一个糟糕的工作。 Mac下来自man cp

除非设置了 -R 标志,否则始终遵循符号链接,在这种情况下,默认情况下不遵循符号链接。

换句话说,既然我们知道我们只是在复制文件,您可以简单地将d 标志替换为R 标志。行为在技术上有所不同(非常不同),但在这种特定情况下并不重要。您需要找到 Makefile 中使用的 cp 标志(希望在文件顶部的 CP 变量中)并简单地更改它们。

如果您确定 cp 是在 Makefile 中执行的最后一件事,您也可以只复制并粘贴它而不是更改 Makefile。

【讨论】:

【参考方案2】:

我能够使用 Corbin 的建议解决这个问题。搜索 Makefile 后,我能够发现错误的来源。

我正在使用 flite-2.0.0-release 并且 Makefile 位于以下目录中: /flite-2.0.0-release/main/.

最后几行如下:

#       The libraries: static and shared (if built)
        cp -pd $(flite_LIBS_deps) $(INSTALLLIBDIR)
ifdef SHFLAGS
        cp -pd $(SHAREDLIBS) $(VERSIONSHAREDLIBS) $(INSTALLLIBDIR)
endif

我已将其更改为以下内容:

#       The libraries: static and shared (if built)
        cp -pR $(flite_LIBS_deps) $(INSTALLLIBDIR)
ifdef SHFLAGS
        cp -pR $(SHAREDLIBS) $(VERSIONSHAREDLIBS) $(INSTALLLIBDIR)
endif

通过将cp -pd 替换为cp -pR,我能够成功安装flite。我希望这个建议会有所帮助。

【讨论】:

【参考方案3】:

我最近遇到了同样的问题,TJ Rana 让我找到了正确的方向,但这是在 MacOS 上安装 flite 的整个过程 (original article here):


Flitevox 或 Flitelib 是一个开源的小型运行时语音引擎。将文本传递给它并创建一个带有机器人说它的音频文件。对于某些项目来说真的很酷而且很有用。

Flitelib 不是 FFmpeg 构建或源代码中可用的本机过滤器。虽然文档说明配置需要–enable-libflite,但在安装FFmpeg 之前需要安装flitelib。如果您尝试启用过滤器,您将收到此错误:

$ ./configure --disable-indevs --enable-libflite --enable-cross-compile
ERROR: libflite not found

If you think configure made a mistake, make sure you are using the latest
version from Git.  If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "ffbuild/config.log" produced by configure as this will help
solve the problem.

在这篇文章中,我将向您展示如何安装 flite 并使其与 FFmpeg 一起使用

首先从源码下载 flitevox 并安装:

$ git clone https://github.com/festvox/flite.git
$ cd flite/
$ ./configure
$ make
$ sudo make install

如果您运行的是 linux,则此安装可以完美运行。如果您运行的是 MacOS,您会收到此错误:

$ sudo make install
Password:
Installing
mkdir -p /usr/local/bin
mkdir -p /usr/local/lib
mkdir -p /usr/local/include/flite
/usr/bin/install -c -m 644 include/*.h /usr/local/include/flite
/usr/bin/install -c -m 755 ../bin/flite_time /usr/local/bin
cp -pd ../build/x86_64-darwin19.0.0/lib/libflite_cmu_us_kal.a ../build/x86_64-darwin19.0.0/lib/libflite_cmu_time_awb.a ../build/x86_64-darwin19.0.0/lib/libflite_cmu_us_kal16.a ../build/x86_64-darwin19.0.0/lib/libflite_cmu_us_awb.a ../build/x86_64-darwin19.0.0/lib/libflite_cmu_us_rms.a ../build/x86_64-darwin19.0.0/lib/libflite_cmu_us_slt.a ../build/x86_64-darwin19.0.0/lib/libflite_usenglish.a ../build/x86_64-darwin19.0.0/lib/libflite_cmu_indic_lang.a ../build/x86_64-darwin19.0.0/lib/libflite_cmu_grapheme_lang.a ../build/x86_64-darwin19.0.0/lib/libflite_cmulex.a ../build/x86_64-darwin19.0.0/lib/libflite_cmu_indic_lex.a ../build/x86_64-darwin19.0.0/lib/libflite_cmu_grapheme_lex.a ../build/x86_64-darwin19.0.0/lib/libflite.a /usr/local/lib
cp: illegal option -- d
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory
make[1]: *** [install] Error 64
make: *** [install] Error 2

那是因为 MacOS 使用与 linux 不同的“cp”变量。我在解决方案中找到了这个 Stack Overflow 答案:https://***.com/a/29075638/525576,但这里是修复它的步骤。

在“flite/main”文件夹中,您需要使用 MacOS 版本的命令编辑 Makefile:

$ cd main/
$ vim Makefile

替换以下内容(来自 TJ Rana):

#       The libraries: static and shared (if built)
        cp -pd $(flite_LIBS_deps) $(INSTALLLIBDIR)
ifdef SHFLAGS
        cp -pd $(SHAREDLIBS) $(VERSIONSHAREDLIBS) $(INSTALLLIBDIR)
endif

到(-pd 到 -pR):

#       The libraries: static and shared (if built)
        cp -pR $(flite_LIBS_deps) $(INSTALLLIBDIR)
ifdef SHFLAGS
        cp -pR $(SHAREDLIBS) $(VERSIONSHAREDLIBS) $(INSTALLLIBDIR)
endif

我们如何再次尝试安装 flite:

$ sudo make install

flite 应该不会显示任何错误并且安装应该已经完成​​。

现在回到 ffmpeg 源过滤器:

$ ./configure --enable-libflite --enable-cross-compile
$ make install

安装将完成。要测试 flite 是否正常工作,请打开一个新终端并输入:

$ ffplay -f lavfi -i flite=text='Hello World!'

Hello world 会说话!

【讨论】:

以上是关于在 Mac OSX 上安装 flite 时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac 10.9.4 上安装 lightblue 时出错

在 Mac OS 上安装 wgrib2 时出错

在 osx 上安装 pg gem 时出错

在 OSX 上安装 rmagick gem 时出错 - 错误:无法构建 gem 原生扩展

在 OS X 上安装 Numba 时出错

使用新的 Ruby 版本在 Mac OSX 上安装 gem