平台特定信息

网站翻译由林建有提供支持

1 类Unix

FFmpeg 的某些部分无法使用 GNU 汇编器 2.15 版编译,该版本仍由一些 AMD64 发行版提供。为确保编译器在升级 binutils 后确实使用所需版本的 gas,请运行:

$(gcc -print-prog-name=as) --version

如果不是,您应该安装一个没有硬编码 gas 路径的不同编译器。在最坏的情况下,将--disable-asm传递给配置文件。

1.1 高级链接配置

如果您静态编译了 FFmpeg 库,并希望使用它们构建自己的共享库,您可能需要强制使用 PIC 支持(使用--enable-pic在 FFmpeg 配置期间)并将以下选项添加到项目的 LDFLAGS:

-Wl,-Bsymbolic

如果目标平台需要位置无关的二进制文件,您应传递正确的链接标志(例如-pie)到--extra-ldexeflags.

1.2 BSD

BSD make 无法编译 FFmpeg,您需要安装并使用 GNU Make(gmake).

1.3 (Open)Solaris

GNU Make 是构建 FFmpeg 所必需的,因此您需要运行(gmake),标准的 Solaris Make 不会工作。当使用非 c99 前端(gcc,通用 suncc)构建时,请添加--extra-libs=/usr/lib/values-xpg6.o--extra-libs=/usr/lib/64/values-xpg6.o到配置选项中,因为 libc 默认不兼容 c99。配置所执行的探针可能会由于系统 shell 中的一个错误而导致自身异常死亡。只需直接调用不同的 shell(如 bash)来解决:

bash ./configure

1.4 Darwin (Mac OS X, iPhone)

Xcode 提供的工具链足以构建基本的未加速代码。

运行于 PowerPC 或 ARM(iPhone)上的 Mac OS X 需要从https://github.com/FFmpeg/gas-preprocessorhttps://github.com/yuvi/gas-preprocessor(当前已过时)获取预处理程序以构建优化的汇编函数。将 Perl 脚本放在 PATH 中的某处,FFmpeg 的配置将自动找到它。

运行于 AMD64 和 x86 的 Mac OS X 需要nasm以构建大多数优化的汇编函数。Fink, Gentoo Prefix, HomebrewMacPorts可以轻松提供这些工具。

2 DOS

由于各种原因,建议使用交叉编译器。http://www.delorie.com/howto/djgpp/linux-x-djgpp.html

3 OS/2

有关在 OS/2 上编译 FFmpeg 的信息,请参阅http://www.edm2.com/index.php/FFmpeg.

4 Windows

4.1 使用 MinGW 或 MinGW-w64 的原生 Windows 编译

可以使用 MinGW-w64 工具链在 Windows 上本地运行 FFmpeg。安装最新版的 MSYS2 和 MinGW-w64,网址为http://msys2.github.io/http://mingw-w64.sourceforge.net/。 您可以在下载部分和常见问题解答中找到详细的安装说明。

注意事项:

  • 不建议为 MSYS 环境构建,MSYS2 提供一个完整的 MinGW-w64 环境,通过mingw64_shell.batmingw32_shell.bat应代替 MSYS 提供的环境使用。msys2_shell.bat.
  • 通过调用make -r而不是简单的make,您可以加快使用 MSYS2 的构建速度。 这种加速对正常的一次性构建几乎没有影响,仅当第二次运行make时(例如,在make install).
  • 期间)才显著。SDL and pkg-config安装。
  • 通过使用./configure --enable-shared在配置 FFmpeg 时,您可以将 FFmpeg 库(例如 libavutil、libavcodec、libavformat)构建为 DLL。

4.1.1 使用 MSYS2 的原生 Windows 编译

MSYS2 MinGW-w64 环境通过pacman.

提供了随时可用的工具链和依赖。mingw64_shell.bat or mingw32_shell.bat to have the correct MinGW-w64 environment. The default install provides shortcuts to them under MinGW-w64 Win64 Shell and MinGW-w64 Win32 Shell.

# normal msys2 packages
pacman -S make pkgconf diffutils

# mingw-w64 packages and toolchains
pacman -S mingw-w64-x86_64-nasm mingw-w64-x86_64-gcc mingw-w64-x86_64-SDL2

要目标是 32 位,请将x86_64替换为i686在命令中。

4.2 Microsoft Visual C++ 或 Intel C++ Compiler for Windows

FFmpeg 能够使用 MSVC 2013 或更高版本构建。

您需要满足下列先决条件:

  • MSYS2
  • NASM(MSYS2 的软件包管理器中也可以获取。)

要在 MSYS2 中设置正确的环境,您需要从msys_shell.batVisual Studio 或 Intel Compiler 命令提示符运行

yasm.exe放在PATH.

接下来,确保任何其他您希望使用的头文件和库文件(例如 zlib)位于编译器可见的路径中。通过修改LIBINCLUDE环境变量将这些目录的Windows 格式路径包含到其中。或者,您也可以尝试使用--extra-cflags/--extra-ldflags配置选项。

最后,运行:

For MSVC:
./configure --toolchain=msvc

For ICL:
./configure --toolchain=icl

make
make install

如果您希望编译共享库,请在配置选项中添加--enable-shared。需要注意的是,由于 MSVC 和 ICL 处理 DLL 导入和导出的方式,您不能同时编译静态库和共享库,启用共享库将自动禁用静态库。

注意事项:

  • 如果您希望构建支持 zlib 的版本,您需要从某处获取一个兼容的 zlib 二进制文件以及一个 MSVC 导入库,或者如果您希望进行静态链接,可以按照以下说明使用 MSVC 构建兼容的zlib.lib。无论使用哪种方式,您仍然需要执行步骤 3,否则将失败。
    1. 获取zlib 源码.
    2. 编辑win32/Makefile.msc使其使用 -MT 而不是 -MD,因为这是 FFmpeg 的默认构建方式。
    3. 编辑zconf.h并移除对unistd.h的引用。 这是在构建 FFmpeg 时错误地包含的。
    4. 运行nmake -f win32/Makefile.msc.
    5. zlib.lib, zconf.hzlib.h移动到 MSVC 可见的位置。
  • FFmpeg 在 i686 和 x86_64 环境下已测试以下版本:
    • Visual Studio 2013 专业版和 Express 版
    • Intel Composer XE 2013
    • Intel Composer XE 2013 SP1

    其他任何版本不被正式支持。

4.2.1 使用 Microsoft Visual C++ 链接到 FFmpeg

如果您计划与 MSVC 构建的静态库链接,则需要确保在项目设置中将Runtime Library设置为Multi-threaded (/MT)

您需要定义inline为 MSVC 能识别的值:

#define inline __inline

另外,请注意,如Microsoft Visual C++中所述,您需要一个兼容 MSVC 的inttypes.h.

如果计划使用通过 dlltool 创建的导入库,则必须将References设置为No (/OPT:NOREF),路径在链接器优化设置下,否则生成的二进制文件将在运行时失败。 如果使用由lib.exe生成的导入库则不需此设置。 上游已报告此问题,详见http://sourceware.org/bugzilla/show_bug.cgi?id=12633.

若要创建可与/OPT:REF选项(在发布模式下默认启用)兼容的导入库,请按以下步骤操作:

  1. 打开Visual Studio 命令提示符.

    或者,在普通命令行提示符中调用vcvars32.bat以设置 Visual C++ 工具的环境变量(该文件的标准位置类似于C:\Program Files (x86_\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat).

  2. 进入创建的 LIB 和 DLL 文件存储的bin目录。
  3. 使用lib.exe:
    lib /machine:i386 /def:..\lib\foo-version.def  /out:foo.lib
    

    生成新导入库。foo-versionfoo替换为相应的库名称。

4.3 在 Linux 上交叉编译 Windows

您必须使用 MinGW 提供的交叉编译工具,地址为http://www.mingw.org/.

然后使用以下选项配置 FFmpeg:

./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc-

(您可以根据选择的 MinGW 工具前缀更改 cross-prefix。)

然后可以使用Wine.

轻松测试 FFmpeg。

请使用 Cygwin 1.7.x,因为过时的 1.5.x Cygwin 版本其 C 库中缺少 llrint()。

在安装 Cygwin 时,选择所有“Base”软件包,以及以下“Devel”软件包:

binutils, gcc4-core, make, git, mingw-runtime, texinfo

为了运行 FATE,您还需要以下“Utils”软件包:

diffutils

如果想要构建包含额外库的 FFmpeg,请从 Cygwin 软件包存储库中下载下面的 Ogg 和 Vorbis 的 "Devel" 软件包:

libogg-devel, libvorbis-devel

这些库包仅可从Cygwin Ports:

yasm, libSDL-devel, libgsm-devel, libmp3lame-devel,
speex-devel, libtheora-devel, libxvidcore-devel

安装。 建议从源码构建 x264,因为它开发得非常快,Cygwin Ports 对其更新可能跟不上。

4.5 在 Cygwin 下为 Windows 交叉编译

使用 Cygwin,您可以生成不需要 cygwin1.dll 的 Windows 二进制文件。

按照之前的说明安装 Cygwin,并添加以下附加 "Devel" 软件包:

gcc-mingw-core, mingw-runtime, mingw-zlib

配置时添加一些特别的标志。

如要进行静态构建,运行

./configure --target-os=mingw32 --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin

如要进行共享库构建,运行

./configure --target-os=mingw32 --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin

本文档是通过makeinfo.

生成的。托管服务由