mdsh.com/wiki


RecentChanges

TextFormattingRules
AllWikiTopics
OrphanedWikiTopics
ToDoWikiTopics
WikiLockList
RSS
Export2HTML

WikiSearch

SetUsername

StartingPoints
Home
Windows:buildFFmpeg @Jun 4, 2011 11:04:00 PM

Building FFmbc for Win32 is best done on Ubuntu - no, honestly. It's easier to cross-compile on Linux than to make the whole compile environment on Windows. So here goes:

Get some tools and libraries



Assuming you're on an Ubuntu 10.04:
 sudo apt-get install mingw32 mingw32-binutils mingw32-runtime
 sudo apt-get install autoconf2.13 pkg-config
 sudo apt-get install git-core


=== GIT might need access through the SOCKS proxy ===
 sudo apt-get install tsocks

Then, when you have to do a `git clone` or a `git pull` do this instead:

 tsocks git clone git://
 OR
 tsocks git pull


== Building libraries ==

Decide and create the place where you are going to do all your building, and set an environment variable so that it is easy to script the install:

 export PREFIX=/usr/local/i586-mingw32msvc
 mkdir -p $PREFIX/src
 sudo install -d $PREFIX/lib
 sudo install -d $PREFIX/include


=== pthreads w32-2-8-0 ===

 cd $PREFIX/src
 wget http://www.mirrorservice.org/sites/sourceware.org/pub/pthreads-win32/pthreads-w32-2-8-0-release.tar.gz
 tar -zxf pthreads-w32-2-8-0-release.tar.gz 
 cd pthreads-w32-2-8-0-release/
 make CROSS=i586-mingw32msvc- realclean GC-static
 sudo /usr/bin/install -m 644 -c libpthreadGC2.a $PREFIX/lib/libpthreadGC2.a
 sudo ln -sf $PREFIX/lib/libpthreadGC2.a $PREFIX/lib/libpthread.a
 sudo /usr/bin/install -m 644 -c pthread.h $PREFIX/include/pthread.h
 sudo /usr/bin/install -m 644 -c sched.h $PREFIX/include/sched.h

=== libxvid-1.2.2 ===

 cd $PREFIX/src
 wget http://downloads.xvid.org/downloads/xvidcore-1.2.2.tar.gz
 tar -zxf xvidcore-1.2.2.tar.gz
 cd xvidcore/build/generic
 ./configure \
	 --host=i586-mingw32msvc \
	 --prefix=$PREFIX
 make xvidcore.a
 sudo install -m 644 =build/xvidcore.a $PREFIX/lib/libxvidcore.a
 sudo install -m 644 ../../src/xvid.h $PREFIX/include/xvid.h


=== zlib-1.2.5 ===

 cd $PREFIX/src
 wget http://zlib.net/zlib-1.2.5.tar.bz2
 tar -jxf zlib-1.2.5.tar.bz2
 cd zlib-1.2.5/
 AR="/usr/bin/i586-mingw32msvc-ar" \
 CC=/usr/bin/i586-mingw32msvc-gcc \
 CPP=/usr/bin/i586-mingw32msvc-cpp \
 CPPFLAGS="-I/usr/i586-mingw32msvc/include -I$PREFIX/include" \
 CXX=/usr/bin/i586-mingw32msvc-g++ \
 LDFLAGS="-L/usr/i586-mingw32msvc/lib -L$PREFIX/lib" \
 PATH=/usr/i586-mingw32msvc/bin:$PATH \
 RANLIB=/usr/bin/i586-mingw32msvc-ranlib \
 RC=/usr/bin/i586-mingw32msvc-windres \
 WINDRES=/usr/bin/i586-mingw32msvc-windres \
 ./configure \
 	--prefix=$PREFIX

Edit '''Makefile''' to remove '''-lc''' from '''LDSHAREDLIBC''' on line 42

 make
 sudo make install


=== libpng-1.5.1 ===

 cd $PREFIX/src

Download source viahttp://www.libpng.org/pub/png/libpng.html

 tar -zxf libpng-1.5.1.tar.gz
 cd libpng-1.5.1/
 CPPFLAGS="-I/usr/i586-mingw32msvc/include -I$PREFIX/include" \
 LDFLAGS="-L/usr/i586-mingw32msvc/lib -L$PREFIX/lib" \
 ./configure \
 	--host=i586-mingw32msvc \
 	--prefix=$PREFIX \
 	--disable-shared \
 	--enable-static
 make
 sudo make install


=== openjpeg_v1_2 ===

 cd $PREFIX/src
 svn checkout http://openjpeg.googlecode.com/svn/trunk/ openjpeg-trunk
 cd openjpeg-trunk
 ./bootstrap.sh
 PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig \
 CPPFLAGS="-I/usr/i586-mingw32msvc/include -I$PREFIX/include" \
 LDFLAGS="-L/usr/i586-mingw32msvc/lib -L$PREFIX/lib" \
 ./configure \
 	--prefix=$PREFIX \
 	--host=i586-mingw32msvc \
 	--disable-shared \
 	--enable-static
 cd libopenjpeg
 make
 sudo make install


=== libogg-1.2.2 ===

 cd $PREFIX/src
 wget http://downloads.xiph.org/releases/ogg/libogg-1.2.2.tar.gz
 tar -zxf libogg-1.2.2.tar.gz
 cd libogg-1.2.2
 ./configure \
 	--host=i586-mingw32msvc \
 	--prefix=$PREFIX \
 	--disable-shared \
 	--enable-static
 make
 sudo make install


=== libvorbis-1.3.2 ===

 cd $PREFIX/src
 wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.2.tar.bz2
 tar -jxf libvorbis-1.3.2.tar.bz2
 cd libvorbis-1.3.2
 PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig \
 CPPFLAGS="-I/usr/i586-mingw32msvc/include -I$PREFIX/include" \
 LDFLAGS="-L/usr/i586-mingw32msvc/lib -L$PREFIX/lib" \
 ./configure \
 	--prefix=$PREFIX \
 	--host=i586-mingw32msvc \
 	--disable-shared \
 	--enable-static
 make
 sudo make install


=== libtheora-1.1.1 ===

 cd $PREFIX/src
 wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.bz2
 tar -jxf libtheora-1.1.1.tar.bz2
 cd libtheora-1.1.1
 PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig \
 CPPFLAGS="-I/usr/i586-mingw32msvc/include -I$PREFIX/include" \
 LDFLAGS="-L/usr/i586-mingw32msvc/lib -L$PREFIX/lib" \
 ./configure \
 	--prefix=$PREFIX \
 	--host=i586-mingw32msvc \
 	--disable-shared \
 	--enable-static
 make
 sudo make install


=== speex-1.2rc1 ===

 cd $PREFIX/src
 wget http://downloads.xiph.org/releases/speex/speex-1.2rc1.tar.gz
 tar -zxf speex-1.2rc1.tar.gz
 cd speex-1.2rc1
 PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig \
 CPPFLAGS="-I/usr/i586-mingw32msvc/include -I$PREFIX/include" \
 LDFLAGS="-L/usr/i586-mingw32msvc/lib -L$PREFIX/lib" \
 ./configure \
 	--prefix=$PREFIX \
 	--host=i586-mingw32msvc \
 	--disable-shared \
 	--enable-static
 make
 sudo make install


=== dirac-1.0.2 ===

 cd $PREFIX/src
 wget http://downloads.sourceforge.net/project/dirac/dirac-codec/Dirac-1.0.2/dirac-1.0.2.tar.gz
 tar -zxf dirac-1.0.2.tar.gz
 cd dirac-1.0.2
 ./configure \
 	--prefix=$PREFIX \
 	--host=i586-mingw32msvc
 make
 sudo make install


=== faac-1.28 ===

 cd $PREFIX
 wget http://downloads.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz
 tar -zxf faac-1.28.tar.gz
 cd faac-1.28
 ./configure \
 	--prefix=$PREFIX \
 	--host=i586-mingw32msvc \
 	--disable-shared
 cd libfaac
 make
 sudo make install
 cd ../include
 sudo make install


=== libgsm-1.0.13 ===

 cd $PREFIX
 apt-get source libgsm
 cd libgsm-1.0.13

Edit '''Makefile'''

 vim Makefile

Add this and comment out any definitions that clash:

 AR = /usr/bin/i586-mingw32msvc-ar
 ARFLAGS = cr
 CC = /usr/bin/i586-mingw32msvc-gcc -ansi -pedantic
 CCFLAGS = -c -O2 -DNeedFunctionPrototypes=1
 CPP = /usr/bin/i586-mingw32msvc-cpp
 CPPFLAGS = -I/usr/i586-mingw32msvc/include -I$PREFIX/include
 CXX = /usr/bin/i586-mingw32msvc-g++
 LD = $(CC)
 LDFLAGS = -L/usr/i586-mingw32msvc/lib -L$PREFIX/lib
 RANLIB = /usr/bin/i586-mingw32msvc-ranlib
 RC = /usr/bin/i586-mingw32msvc-windres
 WINDRES = /usr/bin/i586-mingw32msvc-windres
 INSTALL_ROOT = $PREFIX

 make

it'll '''fail''' with this error

 ./src/toast.o:toast.c:(.text+0x68b): undefined reference to `_fchmod'
 ./src/toast.o:toast.c:(.text+0x6c7): undefined reference to `_fchown'
 collect2: ld returned 1 exit status
 make: *** [bin/toast] Error 1

but never mind, as it's built what we need...

 chmod 644 lib/libgsm.a
 i586-mingw32msvc-ranlib lib/libgsm.a
 sudo /usr/bin/install -c lib/libgsm.a $PREFIX/lib/libgsm.a
 sudo /usr/bin/install -d $PREFIX/include/gsm
 sudo /usr/bin/install -c inc/gsm.h $PREFIX/include/gsm/gsm.h


=== lame-398-4 ===

 cd $PREFIX/src
 wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz
 tar -zxf lame-3.98.4.tar.gz
 cd lame-3.98.4/
 ./configure \
 	--prefix=$PREFIX \
 	--host=i586-mingw32msvc \
 	--disable-shared
 make
 sudo make install


=== libx264 ===

 cd $PREFIX/src
 git clone git://git.videolan.org/x264.git
 cd x264
 ./configure \
		  --host=i586-mingw32msvc \
		  --prefix=$PREFIX \
		  --cross-prefix=i586-mingw32msvc- \
		  --extra-cflags='--static -I $PREFIX/include -I /usr/i586-mingw32msvc/include/' \
		  --extra-ldflags='-static -L $PREFIX/lib -L /usr/i586-mingw32msvc/lib/'
 make
 sudo make install


=== schroedinger-1.0.10 ===

Schroedinger requires ORC:

 cd $PREFIX/src
 wget http://code.entropywave.com/download/orc/orc-0.4.14.tar.gz
 tar -zxf orc-0.4.14.tar.gz
 cd orc-0.4.14/
 PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig \
 ./configure \
 	--prefix=$PREFIX \
 	--host=i586-mingw32msvc \
 	--enable-static \
 	--disable-shared
 make
 sudo make install

When that's complete, make Schro':

 cd $PREFIX/src
 wget http://diracvideo.org/download/schroedinger/schroedinger-1.0.10.tar.gz
 tar -zxf schroedinger-1.0.10.tar.gz 
 cd schroedinger-1.0.10/
 PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig \
 CPPFLAGS="-I/usr/i586-mingw32msvc/include -I$PREFIX/include -DPTW32_STATIC_LIB" \
 LDFLAGS="-L/usr/i586-mingw32msvc/lib -L$PREFIX/lib" \
 LIBS="-lws2_32" \
 ./configure \
 	--prefix=$PREFIX \
 	--host=i586-mingw32msvc \
 	--enable-static \
 	--disable-shared \
 	--with-thread=pthread
 make
 sudo make install

Edit '''$PREFIX/lib/pkgconfig/schroedinger-1.0.pc''' to add '''-lws2_32''' to '''Libs.private''' line

 sudo vim $PREFIX/lib/pkgconfig/schroedinger-1.0.pc
 ...
 Libs.private: -lpthread -lws2_32 -lm
 ...


=== VPx ===

 cd $PREFIX/src
 git clone git://review.webmproject.org/libvpx.git
 cd libvpx
 CROSS=i586-mingw32msvc- \
 ./configure \
 	--prefix=$PREFIX \
 	--target=x86-win32-gcc \
 	--cpu=i686 \
 	--disable-shared \
 	--disable-examples
 make verbose=1
 sudo make install


== Building FFmbc ==

 cd $PREFIX/src
 wget http://ffmbc.googlecode.com/files/FFmbc-0.6-rc5.tar.gz
 tar -zxf FFmbc-0.6-rc5.tar.gz
 cd FFmbc-0.6-rc5

=== Static build ===

==== Configure ====

 PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig \
 ./configure \
 	--cpu=i686 \
 	--arch=i686 \
 	--prefix=$PREFIX \
 	--target-os=mingw32 \
 	--enable-memalign-hack \
 	--cross-prefix=i586-mingw32msvc- \
 	--extra-cflags='--static -I $PREFIX/include -D_WIN32_WINNT=0x0501' \
 	--extra-ldflags='-static -L $PREFIX/lib' \
 	--enable-gpl \
 	--enable-nonfree \
 	--enable-pthreads \
 	--enable-static \
 	--disable-shared \
 	--enable-libdirac \
 	--enable-libfaac \
 	--enable-libgsm \
 	--enable-libmp3lame \
 	--enable-libopenjpeg \
 	--enable-libspeex \
 	--enable-libtheora \
 	--enable-libvorbis \
 	--enable-libxvid \
 	--enable-libschroedinger \
 	--enable-libx264 \
 	--enable-libvpx

Edit '''config.mak''' to remove '''-Werror=missing-prototypes''' from the end of
'''CFLAGS''' line 29

 make
 sudo make install


VeryQuickWiki Version 2.8.1 | Admin

All contents copyright mdsh.com (C) 2011-2023.