网站翻译由林建有提供支持
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-preprocessor或https://github.com/yuvi/gas-preprocessor(当前已过时)获取预处理程序以构建优化的汇编函数。将 Perl 脚本放在 PATH 中的某处,FFmpeg 的配置将自动找到它。
运行于 AMD64 和 x86 的 Mac OS X 需要nasm
以构建大多数优化的汇编函数。Fink,
Gentoo Prefix,
Homebrew或MacPorts可以轻松提供这些工具。
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.bat或mingw32_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 中设置正确的环境,您需要从msys_shell.bat
Visual Studio 或 Intel Compiler 命令提示符运行
将yasm.exe
放在PATH
.
接下来,确保任何其他您希望使用的头文件和库文件(例如 zlib)位于编译器可见的路径中。通过修改LIB
和INCLUDE
环境变量将这些目录的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,否则将失败。- 获取zlib 源码.
- 编辑
win32/Makefile.msc
使其使用 -MT 而不是 -MD,因为这是 FFmpeg 的默认构建方式。 - 编辑
zconf.h
并移除对unistd.h
的引用。 这是在构建 FFmpeg 时错误地包含的。 - 运行
nmake -f win32/Makefile.msc
. - 将
zlib.lib
,zconf.h
和zlib.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
选项(在发布模式下默认启用)兼容的导入库,请按以下步骤操作:
- 打开Visual Studio 命令提示符.
或者,在普通命令行提示符中调用vcvars32.bat以设置 Visual C++ 工具的环境变量(该文件的标准位置类似于C:\Program Files (x86_\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat).
- 进入创建的 LIB 和 DLL 文件存储的bin目录。
- 使用
lib.exe
:lib /machine:i386 /def:..\lib\foo-version.def /out:foo.lib
生成新导入库。
foo-version
和foo
替换为相应的库名称。
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.
生成的。托管服务由