平台特定信息

目录

1 类Unix

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

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

如果没有,那么您应该安装一个没有硬编码的 Gas 路径的不同编译器。在最坏的情况下通过--disable-asm 配置。

1.1 Advanced linking configuration

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

-Wl,-Bsymbolic

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

1.2 BSD

BSD make 不会构建 FFmpeg,您需要安装并使用 GNU Make ( gmake)。

1.3 (Open)Solaris

构建 FFmpeg 需要 GNU Make,因此您必须调用 ( gmake),标准 Solaris Make 将无法工作。当使用非 c99 前端(gcc、通用 suncc)构建时,请在配置选项中添加 或 ,--extra-libs=/usr/lib/values-xpg6.o 因为--extra-libs=/usr/lib/64/values-xpg6.o默认情况下 libc 不兼容 c99。由于系统 shell 中的错误,configure 执行的探测可能会引发异常,导致configure 本身死亡。只需直接调用不同的 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构建大部分优化的汇编函数。FinkGentoo PrefixHomebrewMacPorts可以轻松提供它。

2 操作系统

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

3操作系统/2

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

4 个窗户

4.1 Native Windows compilation using MinGW or MinGW-w64

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

笔记:

  • 不鼓励构建 MSYS 环境,MSYS2 通过以下方式提供完整的 MinGW-w64 环境mingw64_shell.bat或者 mingw32_shell.bat应该使用它来代替提供的环境msys2_shell.bat
  • make -r通过调用而不是普通的来禁用 Makefile 中的隐式规则,可以加快使用 MSYS2 的构建速度make。对于正常的一次性构建来说,这种加速几乎不存在,并且仅在第二次运行 make 时(例如在 期间 make install)才明显。
  • 为了编译FFplay,您必须拥有并安装SDLpkg-config的MinGW开发库。
  • 通过./configure --enable-shared在配置 FFmpeg 时使用,您可以将 FFmpeg 库(例如 libavutil、libavcodec、libavformat)构建为 DLL。

4.1.1 使用MSYS2进行本机Windows编译

MSYS2 MinGW-w64 环境通过pacman.

确保使用mingw64_shell.bat或者mingw32_shell.bat拥有正确的 MinGW-w64 环境。默认安装在MinGW-w64 Win64 Shell和下提供了它们的快捷方式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++ or Intel C++ Compiler for Windows

FFmpeg 可以使用 MSVC 2013 或更高版本构建。

您将需要满足以下先决条件:

  • 系统2
  • NASM (也可通过 MSYS2 的包管理器使用。)

要在 MSYS2 中设置正确的环境,您需要msys_shell.bat从 Visual Studio 或 Intel 编译器命令提示符运行。

放在yasm.exe你的某个地方PATH

接下来,确保您要使用的任何其他标头和库(例如 zlib)位于编译器可以看到的位置。为此,请修改LIBINCLUDE环境变量以包含 这些目录的Windows 样式路径。或者,您可以尝试使用 --extra-cflags/ --extra-ldflagsconfigure 选项。

最后,运行:

For MSVC:
./configure --toolchain=msvc

For ICL:
./configure --toolchain=icl

make
make install

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

笔记:

  • 如果您希望使用 zlib 支持进行构建,则必须使用 MSVC 导入库从某处获取兼容的 zlib 二进制文件,或者如果您希望静态链接,则可以按照以下说明构建与 MSVC 兼容的 zlib 二进制文件 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.libzconf.h、 和移动zlib.h到 MSVC 可以看到的地方。
  • FFmpeg 已在 i686 和 x86_64 上进行了以下测试:
    • Visual Studio 2013 专业版和 Express
    • 英特尔 Composer XE 2013
    • 英特尔作曲家 XE 2013 SP1

    其他任何内容均不受官方支持。

4.2.1 使用 Microsoft Visual C++ 链接 FFmpeg

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

您需要定义inlineMSVC 可以理解的内容:

#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文件的目录。
  3. 使用以下命令生成新的导入库lib.exe
    lib /machine:i386 /def:..\lib\foo-version.def  /out:foo.lib
    

    foo-version和替换foo为相应的库名称。

4.3 Cross compilation for Windows with Linux

您必须使用http://www.mingw.org/上提供的 MinGW 交叉编译工具 。

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

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

(您可以根据为 MinGW 工具选择的前缀更改交叉前缀)。

然后你就可以用Wine轻松测试 FFmpeg 了。

4.4 Compilation under Cygwin

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

使用所有“Base”软件包以及以下“Devel”软件包安装 Cygwin:

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

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

diffutils

如果您想使用其他库构建 FFmpeg,请从任何 Cygwin 软件包存储库下载适用于 Ogg 和 Vorbis 的 Cygwin“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 Crosscompilation for Windows under Cygwin

使用 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

本文档于2023 年 11 月 17 日使用makeinfo 生成。

由telepoint.bg提供的托管