プラットフォーム別の情報
1 Unix系
FFmpeg の一部は、いくつかの AMD64 ディストリビューションが今も提供している GNU アセンブラの 2.15 ではビルドできません。binutils をアップグレードしたあとに、コンパイラが本当に必要なバージョンの gas を使っているか確認するには、次を実行します。
$(gcc -print-prog-name=as) --version
そうでない場合は、gas へのパスがハードコードされていない別のコンパイラをインストールするとよいでしょう。最悪の場合は configure に --disable-asm を渡します。
1.1 高度なリンク設定
FFmpeg のライブラリを静的にコンパイルし、それを使って独自の共有ライブラリをビルドしたい場合は、(FFmpeg の configure 時に --enable-pic を付けて) PIC サポートを強制し、プロジェクトの 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) でビルドする場合は、libc が既定では c99 準拠でないため、configure オプションに --extra-libs=/usr/lib/values-xpg6.o または --extra-libs=/usr/lib/64/values-xpg6.o のいずれかを追加します。configure が行う検査は、システムシェルのバグにより例外を発生させ、configure 自体を異常終了させることがあります。これを回避するには、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 の configure が自動的に見つけてくれます。
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 ネイティブのコンパイル
FFmpeg は MinGW-w64 ツールチェインを使って Windows 上でネイティブに動作するようビルドできます。http://msys2.github.io/ や http://mingw-w64.sourceforge.net/ から最新版の MSYS2 と MinGW-w64 をインストールします。詳しいインストール手順はダウンロードセクションと FAQ にあります。
注意点:
- MSYS 環境向けのビルドは推奨されません。MSYS2 は mingw64_shell.bat または mingw32_shell.bat を通じて完全な MinGW-w64 環境を提供するので、msys2_shell.bat が提供する環境ではなくこちらを使ってください。
- MSYS2 でのビルドは、単なる
makeの代わりにmake -rを呼び出して Makefile の暗黙ルールを無効化すると高速化できます。ただし通常の一度きりのビルドではほとんど効果がなく、make を2回目に実行するとき (例えばmake installの際) にしか体感できません。 - FFplay をコンパイルするには、SDL の MinGW 開発ライブラリと
pkg-configがインストールされている必要があります。 - FFmpeg の configure 時に
./configure --enable-sharedを使えば、FFmpeg のライブラリ (libavutil、libavcodec、libavformat など) を DLL としてビルドできます。
4.1.1 MSYS2 を使った Windows ネイティブのコンパイル
MSYS2 の MinGW-w64 環境は、すぐに使えるツールチェインと依存パッケージを pacman 経由で提供します。
正しい MinGW-w64 環境にするため、必ず mingw64_shell.bat または mingw32_shell.bat を使ってください。既定のインストールでは、これらへのショートカットが 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 Windows 向けの Microsoft Visual C++ または Intel C++ Compiler
FFmpeg は MSVC 2013 以降でビルドできます。
次の前提ソフトウェアが必要です。
MSYS2 で適切な環境を整えるには、Visual Studio または Intel Compiler のコマンドプロンプトから msys_shell.bat を実行する必要があります。
nasm.exe を PATH の通った場所に置きます。
次に、zlib など使いたい他のヘッダやライブラリが、コンパイラから見える場所にあることを確認します。これには、LIB と INCLUDE 環境変数を変更して、これらのディレクトリへの Windows 形式 のパスを含めればよいでしょう。あるいは、--extra-cflags/--extra-ldflags の configure オプションを使ってみることもできます。
最後に、次を実行します。
For MSVC:
./configure --toolchain=msvc
For ICL:
./configure --toolchain=icl
make
make install
共有ライブラリをコンパイルしたい場合は、configure オプションに --enable-shared を追加します。MSVC と ICL の DLL インポート/エクスポートの扱い方により、静的ライブラリと共有ライブラリを同時にはコンパイルできず、共有ライブラリを有効にすると静的ライブラリは自動的に無効になる点に注意してください。
注意点:
- zlib サポート付きでビルドしたい場合は、MSVC のインポートライブラリ付きの互換 zlib バイナリをどこかから入手する必要があります。あるいは静的にリンクしたい場合は、以下の手順に従って MSVC で互換の
zlib.libをビルドできます。どちらの方法を使うにしても、手順 3 は必ず行う必要があります。さもないとコンパイルに失敗します。- zlib のソース を入手します。
- FFmpeg も同じ方法でビルドされるので、
win32/Makefile.mscを編集して -MD ではなく -MT を使うようにします。 zconf.hを編集してunistd.hのインクルードを削除します。これは FFmpeg のビルド時に誤ってインクルードされてしまいます。nmake -f win32/Makefile.mscを実行します。zlib.lib、zconf.h、zlib.hを MSVC から見える場所に移動します。
- FFmpeg は i686 と x86_64 上で次の環境でテストされています。
- Visual Studio 2013 Pro and 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 向けクロスコンパイル
http://www.mingw.org/ で入手できる MinGW のクロスコンパイルツールを使う必要があります。
そのうえで、次のオプションで FFmpeg を configure します。
./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc-
(cross-prefix は、MinGW ツールに選んだプレフィックスに合わせて変更してかまいません)。
あとは Wine を使えば FFmpeg を簡単にテストできます。
4.4 Cygwin 上でのコンパイル
古い 1.5.x の Cygwin は C ライブラリに llrint() を欠いているので、Cygwin 1.7.x を使ってください。
Cygwin は「Base」パッケージをすべて、加えて次の「Devel」パッケージをインストールします。
binutils, gcc4-core, make, git, mingw-runtime, texinfo
FATE を実行するには、さらに次の「Utils」パッケージも必要です。
diffutils
追加のライブラリ付きで FFmpeg をビルドしたい場合は、任意の Cygwin パッケージリポジトリから Ogg と Vorbis の Cygwin「Devel」パッケージをダウンロードします。
libogg-devel, libvorbis-devel
次のライブラリパッケージは Cygwin Ports からのみ入手できます。
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 の呼び出しにいくつかの特別なフラグを追加します。
静的ビルドの場合は次を実行します。
./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
4.6 ARM64EC
FFmpeg は Windows の ARM64EC ビルド構成をサポートする意図がありません。ARM64EC を目的として個々のライブラリを変更するパッチは受け付けられません。
それでもこのビルド構成で FFmpeg をビルドすること自体は可能かもしれず、ある程度は動作するように見えることもあります。ただしそうしたビルドには ABI の不整合がいくらか残る可能性があり、私たちはそれを修正するつもりはありません。
(aarch64 のアセンブリコードを ARM64EC に厳密に対応させるには、該当するほぼすべてのアセンブリコードを ifdef で分岐させたり変更したりする必要があり、保守の負担が非常に大きくなります。さらに、ABI の不整合を直すためにライブラリの ABI 境界を変更すると、広範で侵襲的な変更が必要になりかねません。)
ホスティング提供: telepoint.bg