[HP-UX] use the +h ld option to record internal library name
------------------------------------------------------------
Key: STDCXX-895
URL: https://issues.apache.org/jira/browse/STDCXX-895
Project: C++ Standard Library
Issue Type: New Feature
Components: Build
Affects Versions: 4.2.0, 4.2.1
Environment: HP-UX
Reporter: Martin Sebor
Priority: Critical
Fix For: 4.2.2
The [HP-UX Linker and Libraries User's Guide: HP 9000
Computers|http://docs.hp.com/en/B2355-90655/index.html] (see also [this
document|http://docs.hp.com/en/B2355-90730/B2355-90730.html]) recommends using
the linker's +h ??internal_name?? option to designate the internal name of the
library. We should follow that recommendation.
Quoting from [Version Control with Shared
Libraries|http://docs.hp.com/en/B2355-90655/ch05s08.html]:
{quote}
h3. +Library-Level Versioning+
HP-UX 10.0 adds a new library-level versioning scheme that allows you to
maintain multiple versions of shared libraries when you make incompatible
changes to the library. By maintaining multiple versions, applications linked
with the older versions continue to run with the older libraries, while new
applications link and run with the newest version of the library. Library-level
versioning is very similar to the library versioning on UNIX System V Release 4.
h4. +How to Use Library-Level Versioning+
To use library-level versioning, follow these steps:
# Name the first version of your shared library with an extension of {{.0}}
(that's the number zero), for example {{libA.0}}. Use the {{+h}} option to
designate the internal name of the library, for example, {{libA.0}}:
{noformat}
ld -b *.o -o libA.0 +h libA.0 Creates the shared library libA.0.
{noformat}
# Since the linker still looks for libraries ending in {{.sl}} with the {{-l}}
option, create a symbolic link from the usual name of the library ending in
{{.sl}} to the actual library. For example, {{libA.sl}} points to {{libA.0}}:
{noformat}
ln -s libA.0 libA.sl libA.sl is a symbolic link to libA.0.
{noformat}
# Link applications as usual, using the {{-l}} option to specify libraries. The
linker searches for {{libA.sl}}, as usual. However, if the library it finds has
an internal name, the linker places the internal name of the library in the
executable's shared library dependency list. When you run the application, the
dynamic loader loads the library named by this internal name. For example:
{noformat}
ld /opt/langtools/lib/crt0.o prog.o -lA -lc Binds a.out with libA.0.
{noformat}
{quote}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.