|
|
|
@ -173,79 +173,33 @@ Anything else is not officially supported. |
|
|
|
|
|
|
|
|
|
@end itemize |
|
|
|
|
|
|
|
|
|
@subsection Using shared libraries built with MinGW in Visual Studio |
|
|
|
|
@subsection Linking to FFmpeg with Microsoft Visual C++ |
|
|
|
|
|
|
|
|
|
Currently, if you want to build shared libraries on Windows, you need to |
|
|
|
|
use MinGW. |
|
|
|
|
|
|
|
|
|
This is how to create DLL and LIB files that are compatible with MSVC++: |
|
|
|
|
|
|
|
|
|
@enumerate |
|
|
|
|
|
|
|
|
|
@item Add a call to @file{vcvars32.bat} (which sets up the environment |
|
|
|
|
variables for the Visual C++ tools) as the first line of @file{msys.bat}. |
|
|
|
|
The standard location for @file{vcvars32.bat} is |
|
|
|
|
@file{C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat}, |
|
|
|
|
and the standard location for @file{msys.bat} is @file{C:\msys\1.0\msys.bat}. |
|
|
|
|
If this corresponds to your setup, add the following line as the first line |
|
|
|
|
of @file{msys.bat}: |
|
|
|
|
|
|
|
|
|
@example |
|
|
|
|
call "C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat" |
|
|
|
|
@end example |
|
|
|
|
|
|
|
|
|
Alternatively, you may start the @file{Visual Studio 2005 Command Prompt}, |
|
|
|
|
and run @file{c:\msys\1.0\msys.bat} from there. |
|
|
|
|
|
|
|
|
|
@item Within the MSYS shell, run @code{lib.exe}. If you get a help message |
|
|
|
|
from @file{Microsoft (R) Library Manager}, this means your environment |
|
|
|
|
variables are set up correctly, the @file{Microsoft (R) Library Manager} |
|
|
|
|
is on the path and will be used by FFmpeg to create |
|
|
|
|
MSVC++-compatible import libraries. |
|
|
|
|
|
|
|
|
|
@item Build FFmpeg with |
|
|
|
|
|
|
|
|
|
@example |
|
|
|
|
./configure --enable-shared |
|
|
|
|
make |
|
|
|
|
make install |
|
|
|
|
@end example |
|
|
|
|
|
|
|
|
|
Your install path (@file{/usr/local/} by default) should now have the |
|
|
|
|
necessary DLL and LIB files under the @file{bin} directory. |
|
|
|
|
|
|
|
|
|
@end enumerate |
|
|
|
|
|
|
|
|
|
Alternatively, build the libraries with a cross compiler, according to |
|
|
|
|
the instructions below in @ref{Cross compilation for Windows with Linux}. |
|
|
|
|
|
|
|
|
|
To use those files with MSVC++, do the same as you would do with |
|
|
|
|
the static libraries, as described above. But in Step 4, |
|
|
|
|
you should only need to add the directory where the LIB files are installed |
|
|
|
|
(i.e. @file{c:\msys\usr\local\bin}). This is not a typo, the LIB files are |
|
|
|
|
installed in the @file{bin} directory. And instead of adding the static |
|
|
|
|
libraries (@file{libxxx.a} files) you should add the MSVC import libraries |
|
|
|
|
(@file{avcodec.lib}, @file{avformat.lib}, and |
|
|
|
|
@file{avutil.lib}). Note that you should not use the GCC import |
|
|
|
|
libraries (@file{libxxx.dll.a} files), as these will give you undefined |
|
|
|
|
reference errors. There should be no need for @file{libmingwex.a}, |
|
|
|
|
@file{libgcc.a}, and @file{wsock32.lib}, nor any other external library |
|
|
|
|
statically linked into the DLLs. |
|
|
|
|
If you plan to link with MSVC-built static libraries, you will need |
|
|
|
|
to make sure you have @code{Runtime Library} set to |
|
|
|
|
@code{Multi-threaded (/MT)} in your project's settings. |
|
|
|
|
|
|
|
|
|
FFmpeg headers do not declare global data for Windows DLLs through the usual |
|
|
|
|
dllexport/dllimport interface. Such data will be exported properly while |
|
|
|
|
building, but to use them in your MSVC++ code you will have to edit the |
|
|
|
|
building, but to use them in your MSVC code you will have to edit the |
|
|
|
|
appropriate headers and mark the data as dllimport. For example, in |
|
|
|
|
libavutil/pixdesc.h you should have: |
|
|
|
|
@example |
|
|
|
|
extern __declspec(dllimport) const AVPixFmtDescriptor av_pix_fmt_descriptors[]; |
|
|
|
|
@end example |
|
|
|
|
|
|
|
|
|
Note that using import libraries created by dlltool requires |
|
|
|
|
the linker optimization option to be set to |
|
|
|
|
"References: Keep Unreferenced Data (@code{/OPT:NOREF})", otherwise |
|
|
|
|
the resulting binaries will fail during runtime. This isn't |
|
|
|
|
required when using import libraries generated by lib.exe. |
|
|
|
|
You will also need to define @code{inline} to something MSVC understands: |
|
|
|
|
@example |
|
|
|
|
#define inline __inline |
|
|
|
|
@end example |
|
|
|
|
|
|
|
|
|
Also note, that as stated in @strong{Microsoft Visual C++}, you will need |
|
|
|
|
an MSVC-compatible @uref{http://code.google.com/p/msinttypes/, inttypes.h}. |
|
|
|
|
|
|
|
|
|
If you plan on using import libraries created by dlltool, you must |
|
|
|
|
set @code{References} to @code{No (/OPT:NOREF)} under the linker optimization |
|
|
|
|
settings, otherwise the resulting binaries will fail during runtime. |
|
|
|
|
This is not required when using import libraries generated by @code{lib.exe}. |
|
|
|
|
This issue is reported upstream at |
|
|
|
|
@url{http://sourceware.org/bugzilla/show_bug.cgi?id=12633}. |
|
|
|
|
|
|
|
|
@ -254,12 +208,12 @@ To create import libraries that work with the @code{/OPT:REF} option |
|
|
|
|
|
|
|
|
|
@enumerate |
|
|
|
|
|
|
|
|
|
@item Open @emph{Visual Studio 2005 Command Prompt}. |
|
|
|
|
@item Open the @emph{Visual Studio Command Prompt}. |
|
|
|
|
|
|
|
|
|
Alternatively, in a normal command line prompt, call @file{vcvars32.bat} |
|
|
|
|
which sets up the environment variables for the Visual C++ tools |
|
|
|
|
(the standard location for this file is |
|
|
|
|
@file{C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat}). |
|
|
|
|
(the standard location for this file is something like |
|
|
|
|
@file{C:\Program Files (x86_\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat}). |
|
|
|
|
|
|
|
|
|
@item Enter the @file{bin} directory where the created LIB and DLL files |
|
|
|
|
are stored. |
|
|
|
|