构建技巧
除了这些提示之外,还有一个构建脚本(build scripts)页面。
救命,我卡住了!
首先,请查看 ./configure –help 的输出。
其次,如果你遇到的问题出在 core 或 avformat 之外的某个模块上,那就禁用该模块, 先让整体能跑起来;如果之后你确实觉得需要它,再回来处理——办法是在 configure 命令上添加 –disable-<module>,例如 ./configure –disable-sox …。
如果你遇到的是 avformat(FFmpeg)模块的问题,请看下文。
Apple Mac OS X
我用的是 10.6(Snow Leopard)。我用 MacPorts (opens in a new tab) 安装了
ffmpeg、SDL 等所有依赖。通常我使用的 MLT 配置是:
--enable-gpl --prefix=/opt/local
Windows
参见 在 Windows 上构建 页面。
avformat(FFmpeg)模块
如果你什么都不指定、也没有禁用该模块,那么 MLT 会尝试针对系统路径中已安装的 版本构建 avformat 模块。通常这意味着 /usr 或 /usr/local,但实际上 MLT 使用的 是你 PATH 中包含 ffmpeg 工具的目录的父目录。举例来说,如果 ‘which ffmpeg’ 返回 /home/me/bin/ffmpeg,那么它就假定前缀是 /home/me,并期望在 /home/me/include/ffmpeg 找到头文件、在 /home/me/lib 找到库。以下选项会覆盖这一行为:
--avformat-shared=path:
将 MLT 模块动态链接到一个未安装到系统路径下的 FFmpeg 共享(shared)构建。 该路径对应于配置 FFmpeg 构建与安装时所用的前缀。
--avformat-static=path:
将 MLT 模块静态链接到一个非私有(未使用 –avformat-svn)的 FFmpeg 库静态构建。 该路径必须指向包含 libavformat、libavcodec 和 libavutil 子目录的顶层源码目录。
--avformat-ldextra=libs:
允许你在做静态构建时指定额外需要链接的库。基本上,你在配置 FFmpeg 构建时 每引入一个外部库,就需要一个对应的 gcc ‘-l’ 选项。
--avformat-suffix=suff:
让你把自己在配置 FFmpeg 构建时使用的 –build-suffix 选项告知 MLT。如果你不理解 这一项,那么通常不包含它就是安全的。
--avformat-swscale:
告知 MLT 你的非私有 FFmpeg 构建使用了 libswcaler。如果你在配置 FFmpeg 构建时 使用了 –enable-swscaler 选项,情况就是如此。
--avformat-no-devices:
禁用对 libavdevice 的链接。
--avformat-no-codecs:
只构建用于重采样、色彩空间转换和去隔行的滤镜。不构建 producer_avformat 或 consumer_avformat。
--avformat-no-filters:
只构建 producer_avformat 和 consumer_avformat,不构建滤镜。模块文件名将是 libmltffmpeg.so 而不是 libmltavformat.so,以避免文件名冲突。
出于专利许可方面的原因而不想包含 FFmpeg 编解码器的发行版,可以把 –avformat-no-codecs 与 –avformat-static 结合使用,做出一个只为 FFmpeg 有价值的 音频/视频处理功能进行静态链接的构建。之后,由社区运行的软件仓库可以用 –avformat-no-filters 提供一个 mlt-ffmpeg 包,作为编解码器的配套插件。要构建这种 包,打包脚本可以使用 =make -C src/modules/avformat install= 而不是通常的顶层 默认 make 目标。
SoX 模块
构建时如果出现错误 “filter_sox.c:40:44: error: missing binary operator before token “(“”, 请继续阅读……
在某些环境中这是一个已知问题,因为在很长一段时间里 sox 并不提供 pkg-config 的 .pc 文件。 因此构建系统中保留了一些为使用旧版本 sox 的系统准备的兼容代码。在某些环境中,这段遗留 代码会识别到它认为有效的 sox 库,但实际上它并不完全可用。现代系统的典型解决办法是 安装 libsox-dev 或 sox-devel 或类似软件包。很快我就会移除这段遗留代码,但不是现在。
自动化构建服务器
已经搭建了一台 TeamCity 服务器 (opens in a new tab), 用于自动执行构建并运行测试,做持续集成的质量控制。