You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	doc/platform: Rework the Visual Studio linking section
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
This commit is contained in:
		| @@ -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. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user