はじめに
ちょっと悶絶したくて、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 +02002週目のためにこのパッチを当てる。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 などになっているものを探す。