configure: Use dllexport/dllimport for data symbols across DLLs with mingw

This avoids having to use pseudo relocations.

The version script used for exporting functions is skipped as soon
as the set of object files contains symbols marked with dllexport,
therefore we need to use makedef to produce the full list of symbols
to be exported.

Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
Martin Storsjö 2017-08-24 23:27:16 +03:00
parent 1a7bf48eed
commit accb06120c
2 changed files with 10 additions and 3 deletions

11
configure vendored
View File

@ -4026,6 +4026,10 @@ case $target_os in
if enabled x86_64; then if enabled x86_64; then
LIBTARGET="i386:x86-64" LIBTARGET="i386:x86-64"
fi fi
if enabled shared; then
# Cannot build both shared and static libs when using dllexport.
disable static
fi
check_ldflags -Wl,--nxcompat check_ldflags -Wl,--nxcompat
check_ldflags -Wl,--dynamicbase check_ldflags -Wl,--dynamicbase
shlibdir_default="$bindir_default" shlibdir_default="$bindir_default"
@ -4033,12 +4037,13 @@ case $target_os in
SLIBSUF=".dll" SLIBSUF=".dll"
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)' SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)' SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); $(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)' SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS= SLIB_INSTALL_LINKS=
SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)' SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)' SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.orig.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base' SLIB_CREATE_DEF_CMD='ARCH="$(ARCH)" AR="$(AR_CMD)" NM="$(NM_CMD)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-auto-image-base $$(@:$(SLIBSUF)=.def)'
enabled x86_64 && objformat="win64" || objformat="win32" enabled x86_64 && objformat="win64" || objformat="win32"
dlltool="${cross_prefix}dlltool" dlltool="${cross_prefix}dlltool"
ranlib=: ranlib=:
@ -5432,6 +5437,8 @@ DEPX86ASMFLAGS=\$(X86ASMFLAGS)
AR=$ar AR=$ar
ARFLAGS=$arflags ARFLAGS=$arflags
AR_O=$ar_o AR_O=$ar_o
AR_CMD=$ar
NM_CMD=$nm
RANLIB=$ranlib RANLIB=$ranlib
STRIP=$strip STRIP=$strip
LN_S=$ln_s LN_S=$ln_s

View File

@ -285,7 +285,7 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame);
*/ */
AVCPBProperties *ff_add_cpb_side_data(AVCodecContext *avctx); AVCPBProperties *ff_add_cpb_side_data(AVCodecContext *avctx);
#if defined(_MSC_VER) && CONFIG_SHARED #if defined(_WIN32) && CONFIG_SHARED
#ifdef BUILDING_avcodec #ifdef BUILDING_avcodec
# define av_export_avcodec __declspec(dllexport) # define av_export_avcodec __declspec(dllexport)
#else #else