From 68f982e01be79f241a306e1dd7328fa1f307ab0c Mon Sep 17 00:00:00 2001 From: Simon Josefsson Date: Wed, 1 Apr 2009 16:49:57 +0200 Subject: Add lib-msvc-compat module. --- doc/ld-output-def.texi | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 doc/ld-output-def.texi (limited to 'doc/ld-output-def.texi') diff --git a/doc/ld-output-def.texi b/doc/ld-output-def.texi new file mode 100644 index 0000000000..3ad1feb547 --- /dev/null +++ b/doc/ld-output-def.texi @@ -0,0 +1,64 @@ +@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. +The tool does not generate DEF files directly, so its output needs to +be post processed manually. The tool is documented to potentially not +work with non-MS development tools +(@url{http://support.microsoft.com/kb/131313/en-us}), which is the +case when MinGW is used to build the library. + +@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-$(SOVERSION).def +defexecdir = $(bindir) +defexec_DATA = libfoo-$(SOVERSION).def +DISTCLEANFILES += $(defexec_DATA) +endif +@end smallexample + +The @code{SOVERSION} 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{SOVERSION} as follows: + +@smallexample +SOVERSION=`expr $@{LT_CURRENT@} - $@{LT_AGE@}` +AC_SUBST(SOVERSION) +@end smallexample -- cgit v1.2.1