Commit 7d1d4469 authored by Derek Buitenhuis's avatar Derek Buitenhuis

doc/platform: Rework the Visual Studio linking section

Signed-off-by: 's avatarDerek Buitenhuis <derek.buitenhuis@gmail.com>
parent ed8a2dde
......@@ -167,54 +167,33 @@ Anything else is not officially supported.
@end itemize
@subsection Using shared libraries built with MinGW in Visual Studio
@subsection Linking to Libav 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++:
Within the MSYS shell, build Libav 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.
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.
Libav 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}.
......@@ -223,12 +202,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.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment