[FFmpeg-cvslog] compat: msvc: Make sure the object files are included when linking statically

Martin Storsjö git at videolan.org
Fri May 3 15:50:15 CEST 2013


ffmpeg | branch: master | Martin Storsjö <martin at martin.st> | Thu May  2 11:01:43 2013 +0300| [769d921f3e4d3808320238f4f33b47cd492f1c04] | committer: Martin Storsjö

compat: msvc: Make sure the object files are included when linking statically

If building libav with -MD in the cflags (for making the MSVC compiler
generate code for using a dynamically linked libc), the system headers
that declare strtod, snprintf and vsnprintf declare the functions as
imported from a DLL. To hook up wrappers of our own for these functions,
the function names are defined to avpriv_*, so that the calling code
within libav calls the wrappers instead. Since these functions
are declared to be imported from DLLs, the calling code expects to
load them from DLL import function pointers (creating references to
_imp__avpriv_strtod instead of directly to avpriv_strtod). If the
libav libraries are not built as DLLs, no such function pointers (as
the calling code expects) are created.

The linker can fix this up automatically in some cases (producing
warnings LNK4217 and LNK4049), if the object files are already
included. By telling the linker to try to include those symbols
(without the _imp prefix as the calling code ends up using),
we get the object files included, so that the linker can do the
automatic fixup. This is done via config.h, so that all (or at least
most) of the object files in our libraries force including the compat
files, to make sure they are included regardless of what files from our
static libraries actually are included.

Signed-off-by: Martin Storsjö <martin at martin.st>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=769d921f3e4d3808320238f4f33b47cd492f1c04
---

 configure |    5 +++++
 1 file changed, 5 insertions(+)

diff --git a/configure b/configure
index fd47e53..269c708 100755
--- a/configure
+++ b/configure
@@ -4082,6 +4082,11 @@ if enabled yasm; then
     printf '' >$TMPASM
 fi
 
+if enabled msvc && ! enabled shared; then
+    echo '#pragma comment(linker, "/include:"EXTERN_PREFIX"avpriv_strtod")' >> $TMPH
+    echo '#pragma comment(linker, "/include:"EXTERN_PREFIX"avpriv_snprintf")' >> $TMPH
+fi
+
 print_config ARCH_   "$config_files" $ARCH_LIST
 print_config HAVE_   "$config_files" $HAVE_LIST
 print_config CONFIG_ "$config_files" $CONFIG_LIST       \



More information about the ffmpeg-cvslog mailing list