diff options
Diffstat (limited to 'gnulib/doc/ld-output-def.texi')
m--------- | gnulib | 0 | ||||
-rw-r--r-- | gnulib/doc/ld-output-def.texi | 68 |
2 files changed, 68 insertions, 0 deletions
diff --git a/gnulib b/gnulib deleted file mode 160000 -Subproject 443bc5ffcf7429e557f4a371b0661abe98ddbc1 diff --git a/gnulib/doc/ld-output-def.texi b/gnulib/doc/ld-output-def.texi new file mode 100644 index 0000000..526ccb0 --- /dev/null +++ b/gnulib/doc/ld-output-def.texi @@ -0,0 +1,68 @@ +@node Visual Studio Compatibility +@section Visual Studio Compatibility +@cindex DEF files +@cindex LD DEF files + +The @code{lib-msvc-compat} module detects whether the linker supports +@code{--output-def} when building a library. That parameter is used +to generate a DEF file for a shared library (DLL). DEF files are +useful for developers that use Visual Studio to develop programs that +links to your library. See the GNU LD manual for more information. + +There are other ways to create a DEF file, but we believe they are all +sub-optimal to using @code{--output-def} during the build process. +The variants we have considered include: + +@itemize @bullet +@item Use DUMPBIN /EXPORTS. +This is explained in @url{http://support.microsoft.com/kb/131313/en-us}. +The tool does not generate DEF files directly, so its output needs to +be post processed manually: +@smallexample +$ @{ echo EXPORTS; \ + dumpbin /EXPORTS libfoo-0.dll | tail -n+20 | awk '@{ print $4 @}'; \ + @} > libfoo-0.def +$ lib /def:libfoo-0.def +@end smallexample + +@item Use IMPDEF. +There is a tool called IMPDEF +(@url{http://sei.pku.edu.cn/~caodg/course/c/reference/win32/tools/dlltool.html}) +that can generate DEF files. However, it is not part of a standard +Visual Studio installation. Further, it is documented as being an +unreliable process. + +@item Use DLLTOOL. +The dlltool is part of the MinGW suite, and thus not part of a +standard Visual Studio installation. The documentation for the IMPDEF +tool claims that DLLTOOL is the wrong tool for this job. Finally, +DLLTOOL does not generate DEF files directly, so it requires +post-processing of the output. + +@end itemize + +If you are using libtool to build your shared library, here is how to +use this module. Import @code{lib-msvc-compat} to your project, and +then add the following lines to the @code{Makefile.am} that builds the +library: + +@smallexample +if HAVE_LD_OUTPUT_DEF +libfoo_la_LDFLAGS += -Wl,--output-def,libfoo-$(DLL_VERSION).def +defexecdir = $(bindir) +defexec_DATA = libfoo-$(DLL_VERSION).def +DISTCLEANFILES += $(defexec_DATA) +endif +@end smallexample + +The @code{DLL_VERSION} variable needs to be defined. It should be the +shared library version number used in the DLL filename. For Windows +targets you compute this value from the values you pass to Libtool's +@code{-version-info}. Assuming you have variables @code{LT_CURRENT} +and @code{LT_AGE} defined for the @code{CURRENT} and @code{AGE} +libtool version integers, you compute @code{DLL_VERSION} as follows: + +@smallexample +DLL_VERSION=`expr $@{LT_CURRENT@} - $@{LT_AGE@}` +AC_SUBST(DLL_VERSION) +@end smallexample |