Martin Storsjö <[email protected]> writes:

> The def files are used for generating import libraries for
> other toolchains (in particular, for generating import libraries
> for MSVC for DLLs built with mingw).
>
> The def files produced by mingw/gcc contains ordinals for each
> exported function. When MSVC tools generate import libraries
> from such a def file, MSVC links to the DLL by the ordinals
> instead of linking by name.
>
> Since the def files aren't maintained by hand, the ordinal
> numbers are assigned (more or less) randomly and any caller
> linking to the libs by ordinals will break as soon as the libraries
> export more/fewer functions.
>
> Therefore, strip out the ordinals from the generated def files,
> to make users link to the libraries by name.
>
> Callers linking to the DLLs using the gcc provided import library
> link by name as they should.
> ---
> dlltool can't easily recreate the same def file, and can't output it
> to stdout either, so that can't be used to get rid of the temp file.
> Got rid of the extra cat call though.
>
>  configure |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/configure b/configure
> index 8cd5696..bb73001 100755
> --- a/configure
> +++ b/configure
> @@ -2826,7 +2826,7 @@ case $target_os in
>          SLIBSUF=".dll"
>          
> SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
>          SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
> -        SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) 
> -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
> +        SLIB_EXTRA_CMD=-'sed -e s/\ @[^\ ]\*// $$(@:$(SLIBSUF)=.def) > 
> $$(@:$(SLIBSUF)=.def).tmp; mv $$(@:$(SLIBSUF)=.def).tmp 
> $$(@:$(SLIBSUF)=.def); $(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l 
> $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
>          SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
>          SLIB_INSTALL_LINKS=
>          SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
> -- 

If you change the link command to output the .def to a different name,
you won't need the mv.

-- 
Måns Rullgård
[email protected]
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to