summaryrefslogtreecommitdiff
path: root/doc/ld-output-def.texi
diff options
context:
space:
mode:
authorSimon Josefsson <simon@josefsson.org>2009-04-01 16:49:57 +0200
committerSimon Josefsson <simon@josefsson.org>2009-04-01 16:49:57 +0200
commit68f982e01be79f241a306e1dd7328fa1f307ab0c (patch)
tree878210b244f94749a57dc8cb475f9b3bac2c64a3 /doc/ld-output-def.texi
parent13e7b3562bf8212bec68e4945aca58185aa35ed5 (diff)
downloadgnulib-68f982e01be79f241a306e1dd7328fa1f307ab0c.tar.gz
Add lib-msvc-compat module.
Diffstat (limited to 'doc/ld-output-def.texi')
-rw-r--r--doc/ld-output-def.texi64
1 files changed, 64 insertions, 0 deletions
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