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 librariesAssuming you're on an Ubuntu 10.04: sudo apt-get install mingw32 mingw32-binutils mingw32-runtime 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:// Building librariesDecide 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 pthreads w32-2-8-0 cd $PREFIX/src libxvid-1.2.2 cd $PREFIX/src zlib-1.2.5 cd $PREFIX/src Edit Makefile to remove '-lc' from 'LDSHAREDLIBC' on line 42 make libpng-1.5.1cd $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 |