Version 3 (modified by rogerdpack, 7 years ago) (diff)



Basically, cross compiling FFmpeg for windows means that you use a special version of the gcc compiler (and related tools) that output a working windows executable when they're done. You can copy it to your windows box and then use it (or use wine to run it under linux, but that kind of defeats the point).

This is sometimes easier than using a "native" compilation in windows because some dependencies' configure scripts accept a cross compiler more readily than a native windows mingw gcc, etc. It also may be "faster" than using mingw's gcc in windows, for whatever reason gcc seems faster in linux.

Cross Compiler

Zeranoe has a script for compiling your own local cross compiler, then you can use it to compile ffmpeg and its libs.

Another option is that some linux distros have packages like mingw-w64-dev or gcc-mingw-w64-i686 which might also get a working local cross compiler system. Basically, they'll add x86_64-w64-mingw32-gcc to a directory or to the PATH somehow. And you're ready to go.

Compile dependencies

Next cross compile any added dependencies you may want, for instead libx264.

The script "" in this repository lists many dependencies.

Compile FFmpeg

Now basically configure and compile FFmpeg like

$ ./configure -enable-memalign-hack  --arch=x86   --target-os=mingw32    --cross-prefix=i686-w64-mingw32-  --pkg-config=pkg-config
$ make

and other options if you want them, like --enable-libx264, etc.

This should eventually create the file ffmpeg_g.exe (ffmpeg.exe with debug symbols) and ffmpeg.exe (ffmpeg.exe "stripped" of its debug symbols). If you cross compile SDL before hand, it will also include ffplay.exe


Here are some more helpful instructions on cross compiling (the old build system used this).

This repository has a script that compiles the cross compiler locally

You can ask questions on the Zeranoe Forum.