目录
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-pic
FFmpeg 配置期间使用)并将以下选项添加到您的项目 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-preprocessor或 https://github.com/yuvi/gas-preprocessor (当前已过时)的预处理器 来构建优化的程序集功能。将 Perl 脚本放在 PATH 中的某个位置,FFmpeg 的配置会自动选择它。
amd64 和 x86 上的 Mac OS X 需要nasm
构建大部分优化的汇编函数。Fink、
Gentoo Prefix、
Homebrew
或MacPorts可以轻松提供它。
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,您必须拥有并安装SDL
pkg-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 或更高版本构建。
您将需要满足以下先决条件:
要在 MSYS2 中设置正确的环境,您需要msys_shell.bat
从 Visual Studio 或 Intel 编译器命令提示符运行。
放在yasm.exe
你的某个地方PATH
。
接下来,确保您要使用的任何其他标头和库(例如 zlib)位于编译器可以看到的位置。为此,请修改LIB
和INCLUDE
环境变量以包含
这些目录的Windows 样式路径。或者,您可以尝试使用
--extra-cflags
/ --extra-ldflags
configure 选项。
最后,运行:
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进行,否则编译会失败。- 获取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
- 英特尔 Composer XE 2013
- 英特尔作曲家 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文件的目录。
- 使用以下命令生成新的导入库
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提供的托管