summaryrefslogtreecommitdiff
path: root/gnulib/doc/ld-version-script.texi
diff options
context:
space:
mode:
Diffstat (limited to 'gnulib/doc/ld-version-script.texi')
m---------gnulib0
-rw-r--r--gnulib/doc/ld-version-script.texi77
2 files changed, 77 insertions, 0 deletions
diff --git a/gnulib b/gnulib
deleted file mode 160000
-Subproject 443bc5ffcf7429e557f4a371b0661abe98ddbc1
diff --git a/gnulib/doc/ld-version-script.texi b/gnulib/doc/ld-version-script.texi
new file mode 100644
index 0000000..4eb8249
--- /dev/null
+++ b/gnulib/doc/ld-version-script.texi
@@ -0,0 +1,77 @@
+@node LD Version Scripts
+@section LD Version Scripts
+
+The @code{lib-symbol-versions} module can be used to add shared
+library versioning support. Currently, only GNU LD and the Solaris
+linker supports this.
+
+Version scripts provides information that can be used by GNU/Linux
+distribution packaging tools. For example, Debian has a tool
+@code{dpkg-shlibdeps} that can determine the minimal required version
+of each dependency (by looking at the symbol list) and stuff the
+information into the Debian specific packaging files.
+
+For more information and other uses of version scripts, see Ulrich
+Drepper's paper @url{http://people.redhat.com/drepper/dsohowto.pdf}
+
+You use the module by importing it to your library, and then add the
+following lines to the @code{Makefile.am} that builds the library:
+
+@smallexample
+if HAVE_LD_VERSION_SCRIPT
+libfoo_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libfoo.map
+endif
+@end smallexample
+
+The version script file format is documented in the GNU LD manual, but
+a small example would be:
+
+@smallexample
+LIBFOO_1.0 @{
+ global:
+ libfoo_init; libfoo_doit; libfoo_done;
+
+ local:
+ *;
+@};
+@end smallexample
+
+If you target platforms that do not support linker scripts (i.e., all
+platforms that doesn't use GNU LD) you may want to consider a more
+portable but less powerful alternative: libtool
+@code{-export-symbols}. It will hide internal symbols from your
+library, but will not add ELF versioning symbols. Your usage would
+then be something like:
+
+@smallexample
+if HAVE_LD_VERSION_SCRIPT
+libfoo_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libfoo.map
+else
+libfoo_la_LDFLAGS += -export-symbols $(srcdir)/libfoo.sym
+endif
+@end smallexample
+
+See the Libtool manual for the file syntax, but a small example would
+be:
+
+@smallexample
+libfoo_init
+libfoo_doit
+libfoo_done
+@end smallexample
+
+To avoid the need for a @code{*.sym} file if your symbols are easily
+expressed using a regular expression, you may use
+@code{-export-symbols-regex}:
+
+@smallexample
+if HAVE_LD_VERSION_SCRIPT
+libfoo_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libfoo.map
+else
+libfoo_la_LDFLAGS += -export-symbols-regex '^libfoo_.*'
+endif
+@end smallexample
+
+For more discussions about symbol visibility, rather than shared
+library versioning, see the @code{visibility} module
+(@pxref{Exported Symbols of Shared Libraries}).