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 16:35:49 -0400
commitbad603c66a7602db65b9398bdf8952898cf4dc8d (patch)
tree11dac3b329e3be6e1c094c5a94e3dc5ceef8e4d1 /doc/platform.texi
parent08c3156dbf7c881d0dee1a254e8d7fae5a606bfa (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.texi86
1 files changed, 20 insertions, 66 deletions
diff --git a/doc/platform.texi b/doc/platform.texi
index a518536b69..6047e71cfe 100644
--- a/doc/platform.texi
+++ b/doc/platform.texi
@@ -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.