doc/platform: Rework the Visual Studio linking section
authorDerek Buitenhuis <derek.buitenhuis@gmail.com>
Fri, 28 Sep 2012 01:52:34 +0000 (01:52 +0000)
committerDerek Buitenhuis <derek.buitenhuis@gmail.com>
Fri, 28 Sep 2012 20:35:49 +0000 (16:35 -0400)
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
doc/platform.texi

index a518536..6047e71 100644 (file)
@@ -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.