
 NOTES FOR UNIX LIKE PLATFORMS
 =============================

 For Unix/POSIX runtime systems on Windows, please see NOTES.WIN.


 OpenSSL uses the compiler to link programs and shared libraries
 ---------------------------------------------------------------

 OpenSSL's generated Makefile uses the C compiler command line to
 link programs, shared libraries and dynamically loadable shared
 objects.  Because of this, any linking option that's given to the
 configuration scripts MUST be in a form that the compiler can accept.
 This varies between systems, where some have compilers that accept
 linker flags directly, while others take them in '-Wl,' form.  You need
 to read your compiler documentation to figure out what is acceptable,
 and ld(1) to figure out what linker options are available.


 Shared libraries and installation in non-default locations
 ----------------------------------------------------------

 Every Unix system has its own set of default locations for shared
 libraries, such as /lib, /usr/lib or possibly /usr/local/lib.  If
 libraries are installed in non-default locations, dynamically linked
 binaries will not find them and therefore fail to run, unless they get
 a bit of help from a defined runtime shared library search path.

 For OpenSSL's application (the 'openssl' command), our configuration
 scripts do NOT generally set the runtime shared library search path for
 you.  It's therefore advisable to set it explicitly when configuring,
 unless the libraries are to be installed in directories that you know
 to be in the default list.

 Runtime shared library search paths are specified with different
 linking options depending on operating system and versions thereof, and
 are talked about differently in their respective documentation;
 variations of RPATH are the most usual (note: ELF systems have two such
 tags, more on that below).

 Possible options to set the runtime shared library search path include
 the following:

    -Wl,-rpath,/whatever/path	# Linux, *BSD, etc.
    -R /whatever/path		# Solaris
    -Wl,-R,/whatever/path	# AIX (-bsvr4 is passed internally)
    -Wl,+b,/whatever/path	# HP-UX
    -rpath /whatever/path	# Tru64, IRIX

 OpenSSL's configuration scripts recognise all these options and pass
 them to the Makefile that they build. (In fact, all arguments starting
 with '-Wl,' are recognised as linker options.)

 Please do not use verbatim directories in your runtime shared library
 search path!  Some OpenSSL config targets add an extra directory level
 for multilib installations.  To help with that, the produced Makefile
 includes the variable LIBRPATH, which is a convenience variable to be
 used with the runtime shared library search path options, as shown in
 this example:

    $ ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl \
        '-Wl,-rpath,$(LIBRPATH)'

 On modern ELF based systems, there are two runtime search paths tags to
 consider, DT_RPATH and DT_RUNPATH.  Shared objects are searched for in
 this order:

    1. Using directories specified in DT_RPATH, unless DT_RUNPATH is
       also set.
    2. Using the environment variable LD_LIBRARY_PATH
    3. Using directories specified in DT_RUNPATH.
    4. Using system shared object caches and default directories.

 This means that the values in the environment variable LD_LIBRARY_PATH
 won't matter if the library is found in the paths given by DT_RPATH
 (and DT_RUNPATH isn't set).

 Exactly which of DT_RPATH or DT_RUNPATH is set by default appears to
 depend on the system.  For example, according to documentation,
 DT_RPATH appears to be deprecated on Solaris in favor of DT_RUNPATH,
 while on Debian GNU/Linux, either can be set, and DT_RPATH is the
 default at the time of writing.

 How to choose which runtime search path tag is to be set depends on
 your system, please refer to ld(1) for the exact information on your
 system.  As an example, the way to ensure the DT_RUNPATH is set on
 Debian GNU/Linux systems rather than DT_RPATH is to tell the linker to
 set new dtags, like this:

    $ ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl \
        '-Wl,--enable-new-dtags,-rpath,$(LIBRPATH)'

 It might be worth noting that some/most ELF systems implement support
 for runtime search path relative to the directory containing current
 executable, by interpreting $ORIGIN along with some other internal
 variables. Consult your system documentation.

 Linking your application
 ------------------------

 Third-party applications dynamically linked with OpenSSL (or any other)
 shared library face exactly the same problem with non-default locations.
 The OpenSSL config options mentioned above might or might not have bearing
 on linking of the target application. "Might" means that under some
 circumstances it would be sufficient to link with OpenSSL shared library
 "naturally", i.e. with -L/whatever/path -lssl -lcrypto. But there are
 also cases when you'd have to explicitly specify runtime search path
 when linking your application. Consult your system documentation and use
 above section as inspiration...

 Shared OpenSSL builds also install static libraries. Linking with the
 latter is likely to require special care, because linkers usually look
 for shared libraries first and tend to remain "blind" to static OpenSSL
 libraries. Referring to system documentation would suffice, if not for
 a corner case. On AIX static libraries (in shared build) are named
 differently, add _a suffix to link with them, e.g. -lcrypto_a.
