diff options
author | Derek Buitenhuis <derek.buitenhuis@gmail.com> | 2012-09-28 05:52:34 +0400 |
---|---|---|
committer | Derek Buitenhuis <derek.buitenhuis@gmail.com> | 2012-09-29 00:35:49 +0400 |
commit | bad603c66a7602db65b9398bdf8952898cf4dc8d (patch) | |
tree | 11dac3b329e3be6e1c094c5a94e3dc5ceef8e4d1 /doc/platform.texi | |
parent | 08c3156dbf7c881d0dee1a254e8d7fae5a606bfa (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.texi | 86 |
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. |