[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.

Reply via email to