在Mac OSX上安装flite时出错

时间:2014-04-11 01:05:39

标签: macos installation makefile static-libraries flite

我已经下载了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

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

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

从linux框中考虑以下man cp片段:

   -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

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

Mac下存在p选项,等同于Linux行为。但是,d选项不存在。

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

幸运的是,有一项重大工作。来自Mac下的man cp

  

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

换句话说,由于我们知道我们只是复制文件,因此您只需将d标志替换为R标志即可。行为在技术上是不同的(非常不同),但在这种特定情况下无关紧要。您需要找到Makefile中使用的cp标志(希望在文件顶部的CP变量中),然后只需更改它们。

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

答案 1 :(得分:1)

我能够使用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。我希望这个建议有所帮助。

答案 2 :(得分:1)

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


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”变量。我找到了该解决方案的堆栈溢出答案:https://stackoverflow.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!'

世界您好!