mdsh.com/wiki


RecentChanges

TextFormattingRules
AllWikiTopics
OrphanedWikiTopics
ToDoWikiTopics
WikiLockList
RSS
Export2HTML

WikiSearch

SetUsername

StartingPoints
Home
Windows:buildFFmpeg

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


Windows:buildFFmpeg is mentioned on: Video | Windows


VeryQuickWiki Version 2.8.1 | Admin

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