summaryrefslogtreecommitdiff
path: root/doc/platform.texi
diff options
context:
space:
mode:
authorDerek Buitenhuis <derek.buitenhuis@gmail.com>2012-09-28 01:52:34 +0000
committerDerek Buitenhuis <derek.buitenhuis@gmail.com>2012-09-28 15:52:21 -0400
commit7d1d4469902bbbdcb225eedd64f84c884cffbc2d (patch)
tree060c74a3cb8c368356e19b2b4d577f4fd39f81c4 /doc/platform.texi
parented8a2ddeea4c0f812a6d46607562f23db2543044 (diff)
doc/platform: Rework the Visual Studio linking section
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Diffstat (limited to 'doc/platform.texi')
-rw-r--r--doc/platform.texi61
1 files changed, 20 insertions, 41 deletions
diff --git a/doc/platform.texi b/doc/platform.texi
index a16bb467ca..3bb9f79e90 100644
--- a/doc/platform.texi
+++ b/doc/platform.texi
@@ -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.