はじめに
ちょっと悶絶したくて、
Ubuntu 上のクロスコンパイル環境で、Windows 64bit 用の ffmpeg をビルドしてみる。
ライセンスの関係で、配布できないものになるので、注意。
ビルド方法は、偉大なる先人である、「
Linux日記: MinGWでx264、ffmpegをビルド」ページをマルパクリ・・・。ありがたや、ありがたや。
make に付いている -j6 は、並列ビルドするオプション。コア数 * 1.5 がいいとかなんとか・・・。場合によって、undefined などのエラーが発生するので注意。
CFLAGS などに指定してある -pipe は、テンポラリファイルではなく、パイプを利用して、メモリを多く使用する代わりに、コンパイルを高速化するオプション。
なお、ビルド手順については、思考錯誤などの手戻りで、ビルド順があやしいので、近々に検証する予定。
【2012/09/19】 ビルド手順の検証完了。やっぱり間違っていた。3回ぐらいやらないと、まともにならないな。手順を見直して、不要なライブラリが削れた。
ついでに、パッチをすべてアップロードした。パッチを当てるときは、解凍したディレクトリに cd してから「patch -p0 < パッチファイル」のようにする。
Blogger のせいなのか、タブ文字がスペース文字に置き換わってしまい、パッチをアップロードせざるを得なかった。
利用したソース
zlib (zlib-1.2.7.tar.bz2)
bzip2 (bzip2-1.0.6.tar.gz)
XZ Utils (xz-5.0.4.tar.bz2)
SDL (SDL-1.2.15.tar.gz)
gpac (gpac-0.5.0.tar.gz)
ffmpeg
ffms2
x264
OpenSSL (openssl-1.0.1c.tar.gz)
libpng (libpng-1.5.12.tar.gz)
libtiff (tiff-3.9.6.tar.gz)
libjpeg-turbo (libjpeg-turbo-1.2.1.tar.gz)
lcms2 (lcms2-2.3.tar.gz)
lame (lame-3.99.5.tar.gz)
faac (faac-1.28.tar.bz2)
libogg (libogg-1.3.0.tar.gz)
libvorbis (libvorbis-1.3.3.tar.gz)
libtheora (libtheora-1.1.1.tar.bz2)
libspeex (speex-1.2rc1.tar.gz)
opencore-amr (opencore-amr-0.1.2.tar.gz)
openjpeg (openjpeg_v1_4_sources_r697.tgz)
xvidcore (xvidcore-1.3.2.tar.bz2)
gsm (gsm-1.0.13.tar.gz)
rtmpdump
libvpx (libvpx-v1.1.0.tar.bz2)
libfdk-aac
未完遂のライブラリ
orc (orc-0.4.16.tar.gz)
libschroedinger (schroedinger-1.0.11.tar.gz)
依存ライブラリのビルド(1週目)
zlib
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
CC=x86_64-w64-mingw32-gcc \
AR=x86_64-w64-mingw32-ar \
RANLIB=x86_64-w64-mingw32-ranlib \
LDSHAREDLIBC="" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32
make -j6
sudo checkinstall --pkgname=zlib-mingw-w64-x86-64 \
--pkgversion="1:1.2.7.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
bzip2
まず、
このパッチを当ててから以下の作業を行う。
make libbz2.a
sudo install -m 644 bzlib.h /usr/x86_64-w64-mingw32/include
sudo install -m 644 libbz2.a /usr/x86_64-w64-mingw32/lib
XZ Utils
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--disable-shared
make -j6
sudo checkinstall --pkgname=xz-utils-mingw-w64-x86-64 \
--pkgversion="1:5.0.4.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
SDL
gpac の依存ライブラリ
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--disable-shared
make -j6
sudo checkinstall --pkgname=libsdl-mingw-w64-x86-64 \
--pkgversion="1:1.2.15.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
gpac
本家ソースの最新版をコンパイルしてみた。
gpac の依存ライブラリ。
そのままで、Ubuntu 上の MinGW 環境で、静的ライブラリをクロスコンパイルしようとしたら、ひどい有様だった。仕方がないのでパッチを当てたら、
パッチファイルが 1300 行を超えた・・・・
パッチは、MinGW 環境での、静的ライブラリ生成専用。動的ライブラリの生成は、できないので注意。
はじめに上記のパッチを当ててから作業を開始する。
パッケージの情報が記述されているが、余計なお世話なのでリネーム
mv gpac.spec gpac.spec_org
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--cross-prefix=x86_64-w64-mingw32- --cpu=x86_64 \
--extra-cflags="-pipe"
make -j6
sudo checkinstall --pkgname=libgpac-mingw-w64-x86-64 \
--pkgversion="1:0.5.0.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default \
sudo make install install-lib
ビルド(1週目)
ffmpeg
各ライブラリは、相互依存するので、はじめは最小構成で FFmpeg をビルドする。
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
commit 83438a0db3c61f06979d1c4159e5c85d52eda488
Date: Mon Sep 17 00:40:55 2012 +0200
2週目のために
このパッチを当てる。1週目では必要ないが、ここで当てておく。
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 --enable-gpl \
--enable-version3 --enable-nonfree \
--enable-postproc --enable-memalign-hack \
--enable-runtime-cpudetect --enable-avisynth \
--enable-w32threads --cross-prefix=x86_64-w64-mingw32- \
--target-os=mingw32 --arch=x86_64 --cpu=x86_64 \
--extra-cflags="-pipe" --extra-cxxflags="-pipe"
make -j6
sudo checkinstall --pkgname=ffmpeg-mingw-w64-x86-64 \
--pkgversion="1:20120909.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
ffms2
svn checkout http://ffmpegsource.googlecode.com/svn/trunk/ ffms2
リビジョン: 712
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 --host=x86_64-w64-mingw32 \
--disable-silent-rules --enable-dependency-tracking \
--disable-shared --enable-static
make -j6
sudo checkinstall --pkgname=ffms2-mingw-w64-x86-64 \
--pkgversion="1:712.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default \
make install-strip
x264
git clone git://git.videolan.org/x264.git x264
commit 198a7ea13ccb727d4ea24b29f5da9b0292387309
Date: Thu Aug 16 13:40:32 2012 -0700
まず、
このパッチを当ててから以下の作業を行う。
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--cross-prefix=x86_64-w64-mingw32- \
--enable-win32thread \
--enable-static \
--extra-cflags="-pipe -O2" \
--extra-ldflags="-lws2_32"
platform: X86_64
system: WINDOWS
cli: yes
libx264: internal
shared: no
static: yes
asm: yes
interlaced: yes
avs: yes
lavf: yes
ffms: yes
gpac: yes
gpl: yes
thread: win32
filters: resize crop select_every
debug: no
gprof: no
strip: no
PIC: no
visualize: no
bit depth: 8
chroma format: all
make -j6
sudo checkinstall --pkgname=libx264-mingw-w64-x86-64 \
--pkgversion="1:20120816.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
依存ライブラリのビルド(2週目)
OpenSSL
make に 並列ビルドオプション(-j)をつけると、undefined エラーとなる。
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./Configure --prefix=/usr/x86_64-w64-mingw32 \
--cross-compile-prefix=x86_64-w64-mingw32- \
mingw64 threads zlib no-shared
make
sudo checkinstall --pkgname=openssl-mingw-w64-x86-64 \
--pkgversion="1:1.0.1c.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
libpng
openjpeg の依存ライブラリ
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--disable-shared
make -j6
sudo checkinstall --pkgname=libpng-mingw-w64-x86-64 \
--pkgversion="1:1.5.12.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
libtiff
openjpeg の依存ライブラリ
4.0.2 でやってみたら、openjpeg で認識してくれなかったので、3.9.6 にした。
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--disable-shared
make -j6
sudo checkinstall --pkgname=libtiff-mingw-w64-x86-64 \
--pkgversion="1:3.9.6.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
libjpeg-turbo
openjpeg の依存ライブラリ
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--disable-shared
make -j6
sudo checkinstall --pkgname=libjpeg-turbo-mingw-w64-x86-64 \
--pkgversion="1:1.2.1.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
lcms2
openjpeg の依存ライブラリ
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--disable-shared
make -j6
sudo checkinstall --pkgname=liblcms2-mingw-w64-x86-64 \
--pkgversion="1:2.3.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
lame
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--disable-shared \
--enable-nasm
make -j6
sudo checkinstall --pkgname=lame-mingw-w64-x86-64 \
--pkgversion="1:3.99.5.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
faac
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 --disable-shared --without-mp4v2
make -j6
sudo checkinstall --pkgname=faac-mingw-w64-x86-64 \
--pkgversion="1:1.28.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
libogg
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 --disable-shared
make -j6
sudo checkinstall --pkgname=libogg-mingw-w64-x86-64 \
--pkgversion="1:1.3.0.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
libvorbis
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 --disable-shared
make -j6
sudo checkinstall --pkgname=libvorbis-mingw-w64-x86-64 \
--pkgversion="1:1.3.3.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
libtheora
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 --disable-shared
make -j6
sudo checkinstall --pkgname=libtheora-mingw-w64-x86-64 \
--pkgversion="1:1.1.1.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
libspeex
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 --disable-shared --enable-sse
make -j6
sudo checkinstall --pkgname=libspeex-mingw-w64-x86-64 \
--pkgversion="1:1.2rc1.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
opencore-amr
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 --disable-shared
make -j6
sudo checkinstall --pkgname=libopencore-amr-mingw-w64-x86-64 \
--pkgversion="1:0.1.2.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
openjpeg
make -j6 だと、エラーとなる。早すぎたんだ・・・
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
LIBS="-lpng" \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 --disable-shared
----------------------------------------------
your configuration
--with-png-libraries: yes
libpng header : yes
--enable-tiff : yes
libtiff header : yes
--enable-lcms2 : yes
lcms2 header : yes
lcms2 version : 2.3
--enable-lcms1 : no
lcms1 header : no
lcms1 version :
--enable-jpwl : no
--enable-jp3d : no
--enable-shared : no
----------------------------------------------
make
sudo checkinstall --pkgname=libopenjpeg-mingw-w64-x86-64 \
--pkgversion="1:1.4.r697.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
xvidcore
以下のようなエラーとなるので
GCC4 から、無くなったオプション
C: ./decoder.c
cc1: エラー: 認識できないコマンドラインオプション ‘-mno-cygwin’ です
原因は、-DWINDOWS オプション。
以下のコマンドで、生成されたオブジェクトファイルの中身をのぞくと、関数名の先頭にアンダースコアが付いている。
x86_64-w64-mingw32-nm build/generic/\=build/utils/x86_asm/cpuid.obj
L: xvidcore.a
L: xvidcore.dll
Creating library file: xvidcore.dll.a
xvid.obj:xvid.c:(.text+0xe0): undefined reference to `check_cpu_features'
xvid.obj:xvid.c:(.text+0x65c): undefined reference to `emms_mmx'
xvid.obj:xvid.c:(.text+0x673): undefined reference to `fdct_mmx_skal'
xvid.obj:xvid.c:(.text+0x67a): undefined reference to `idct_mmx'
...
plugins/plugin_ssim.obj:plugin_ssim.c:(.text+0x12c1): undefined reference to `check_cpu_features'
plugins/plugin_ssim.obj:plugin_ssim.c:(.text+0x12d8): undefined reference to `lum_8x8_mmx'
plugins/plugin_ssim.obj:plugin_ssim.c:(.text+0x12e3): undefined reference to `consim_mmx'
plugins/plugin_ssim.obj:plugin_ssim.c:(.text+0x12fb): undefined reference to `consim_sse2'
collect2: ld はステータス 1 で終了しました
make: *** [xvidcore.dll] エラー 1
まず、
このパッチを当ててから以下の作業を行う。
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
AFLAGS="-DNO_PREFIX" \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32
make -j6
sudo checkinstall --pkgname=libxvidcore-mingw-w64-x86-64 \
--pkgversion="1:1.3.2.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
gsm
まず、
このパッチを当ててから以下の作業を行う。
make -j6
sudo checkinstall --pkgname=libgsm-mingw-w64-x86-64 \
--pkgversion="1:1.0.13.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default \
make gsminstall
rtmpdump
git clone git://git.ffmpeg.org/rtmpdump
commit e0056c51cc1710c9a44d2a2c4e2f344fa9cabcf4
Date: Tue Jul 24 17:17:26 2012 +0200
make SYS=mingw SHARED= CROSS_COMPILE=x86_64-w64-mingw32- \
OPT="-O2" XLIBS="-lcrypt32" \
prefix=/usr/x86_64-w64-mingw32
sudo checkinstall --pkgname=rtmpdump-mingw-w64-x86-64 \
--pkgversion="1:$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default \
make SYS=mingw SHARED= CROSS_COMPILE=x86_64-w64-mingw32- \
OPT="-O2" XLIBS="-lcrypt32" \
install prefix=/usr/x86_64-w64-mingw32
libvpx
pthread がインストールされていない場合、win32thread を利用するようになる。
その時に、windows.h が import されずに「不明な型名 CRITICAL_SECTION」エラーとなるため、
このパッチを当てる。
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
CROSS=x86_64-w64-mingw32- \
./configure --target=x86_64-win64-gcc --prefix=/usr/x86_64-w64-mingw32 \
--disable-shared \
--disable-examples
make -j6
sudo checkinstall --pkgname=libvpx-mingw-w64-x86-64 \
--pkgversion="1:1.1.0.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
libfdk-aac
今回は、GitHub からソースを取得した。
git clone https://github.com/mstorsjo/fdk-aac.git
cd fdk-aac
fdk-aac$ git log
commit 226601a8d9bce81455e161a0e26051d2f22c5d7a
Date: Mon Mar 18 16:23:17 2013 +0200
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--disable-shared --enable-static --enable-fast-install
make -j6
sudo checkinstall --pkgname=libfdk-aac-mingw-w64-x86-64 \
--pkgversion="1:0.1.1.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
ビルド(2週目)
ffmpeg
make clean
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--cross-prefix=x86_64-w64-mingw32- --target-os=mingw32 \
--arch=x86_64 --cpu=x86_64 --enable-gpl --enable-version3 \
--enable-nonfree --enable-postproc \
--enable-memalign-hack --enable-runtime-cpudetect \
--enable-avisynth --disable-debug \
--extra-libs="-lws2_32 -lgdi32 -lwinmm" --enable-w32threads \
--enable-zlib --enable-bzlib --enable-libmp3lame \
--enable-libfaac --enable-libvorbis --enable-libtheora \
--enable-libspeex --enable-libopencore-amrnb \
--enable-libopencore-amrwb --enable-libopenjpeg \
--enable-libxvid --enable-libgsm \
--enable-librtmp \
--enable-libx264 \
--enable-libfdk-aac \
--extra-cflags="-pipe" --extra-cxxflags="-pipe"
make -j6
sudo checkinstall --pkgname=ffmpeg-mingw-w64-x86-64 \
--pkgversion="1:20120909.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
ffms2
make clean
CFLAGS="-pipe -O2" \
CXXFLAGS="${CFLAGS}" \
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 --host=x86_64-w64-mingw32
make -j6
sudo checkinstall --pkgname=ffms2-mingw-w64-x86-64 \
--pkgversion="1:712.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default \
make install-strip
x264
configure で、ライブラリを指定しまくらないと、ffms2 が有効にならない。自動的に設定してくれないものなのか・・・
config.log を頼りに、不足のライブラリをせっせと追加したが、心が折れそうになった。
make clean
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \
./configure --prefix=/usr/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--cross-prefix=x86_64-w64-mingw32- \
--enable-win32thread --enable-static --enable-strip \
--extra-cflags="-pipe -O2" \
--extra-ldflags="-lx264 -lfdk-aac -lfaac -lgsm -lmp3lame -lopencore-amrnb -lopencore-amrwb -lopenjpeg -ltheoraenc -ltheoradec -lspeex -lvorbis -lvorbisenc -logg -lxvidcore -lrtmp -lssl -lcrypto -lws2_32 -lgdi32 -lwinmm"
make -j6
sudo checkinstall --pkgname=libx264-mingw-w64-x86-64 \
--pkgversion="1:20120816.$(date +%Y%m%d)-0ubuntu1" \
--backup=no --deldoc=yes --fstrans=no --default
実行ファイルのチェック
ビルドした実行ファイルが、DLL 依存になっていないかをチェック。
$ x86_64-w64-mingw32-objdump -p x264.exe | grep 'DLL Name'
DLL Name: ADVAPI32.dll
DLL Name: AVIFIL32.dll
DLL Name: GDI32.dll
DLL Name: KERNEL32.dll
DLL Name: msvcrt.dll
DLL Name: msvcrt.dll
DLL Name: USER32.dll
DLL Name: WINMM.dll
DLL Name: WS2_32.dll
$ x86_64-w64-mingw32-objdump -p ffmpeg.exe | grep 'DLL Name'
DLL Name: ADVAPI32.dll
DLL Name: AVICAP32.dll
DLL Name: AVIFIL32.dll
DLL Name: GDI32.dll
DLL Name: KERNEL32.dll
DLL Name: msvcrt.dll
DLL Name: msvcrt.dll
DLL Name: PSAPI.DLL
DLL Name: SHELL32.dll
DLL Name: USER32.dll
DLL Name: WINMM.dll
DLL Name: WS2_32.dll
備忘録
ビルド中に発生した問題の解決方法を備忘録として残しておく。
configure の先頭行のシェルに -x オプションを付け、デバッグ出力する。
configu.log をみて、依存ライブラリチェック処理のエラーなどを確認する。
undefined reference が、発生した場合は、/usr/x86_64-w64-mingw32 ディレクトリで、
fgrep -r --exclude-dir="bin" --exclude-dir="sbin" 未定義ラベル名 *
のようにして、探す。
ライブラリが絞り込めたら、
x86_64-w64-mingw32-nm lib/libtheoraenc.a | grep th_encode_flushheader
のようにすると、
U th_encode_flushheader
0000000000004d70 T th_encode_flushheader
のように表示される。U は未定義、T などになっているものを探す。