]> git.ipfire.org Git - thirdparty/openssl.git/blame - NOTES-UNIX.md
Fix "Error finalizing cipher loop" when running openssl speed -evp -decrypt
[thirdparty/openssl.git] / NOTES-UNIX.md
CommitLineData
4148581e 1Notes for UNIX-like platforms
1dc1ea18 2=============================
45632ee3 3
1dc1ea18 4 For Unix/POSIX runtime systems on Windows,
4148581e 5 please see the [Notes for Windows platforms](NOTES-WINDOWS.md).
45632ee3 6
445bc808
RL
7 OpenSSL uses the compiler to link programs and shared libraries
8 ---------------------------------------------------------------
45632ee3 9
445bc808
RL
10 OpenSSL's generated Makefile uses the C compiler command line to
11 link programs, shared libraries and dynamically loadable shared
12 objects. Because of this, any linking option that's given to the
13 configuration scripts MUST be in a form that the compiler can accept.
14 This varies between systems, where some have compilers that accept
1dc1ea18 15 linker flags directly, while others take them in `-Wl,` form. You need
445bc808 16 to read your compiler documentation to figure out what is acceptable,
1dc1ea18 17 and `ld(1)` to figure out what linker options are available.
45632ee3 18
445bc808
RL
19 Shared libraries and installation in non-default locations
20 ----------------------------------------------------------
21
22 Every Unix system has its own set of default locations for shared
1dc1ea18 23 libraries, such as `/lib`, `/usr/lib` or possibly `/usr/local/lib`. If
445bc808 24 libraries are installed in non-default locations, dynamically linked
2c879241
AP
25 binaries will not find them and therefore fail to run, unless they get
26 a bit of help from a defined runtime shared library search path.
445bc808 27
1dc1ea18 28 For OpenSSL's application (the `openssl` command), our configuration
445bc808 29 scripts do NOT generally set the runtime shared library search path for
2c879241 30 you. It's therefore advisable to set it explicitly when configuring,
445bc808
RL
31 unless the libraries are to be installed in directories that you know
32 to be in the default list.
33
34 Runtime shared library search paths are specified with different
35 linking options depending on operating system and versions thereof, and
36 are talked about differently in their respective documentation;
37 variations of RPATH are the most usual (note: ELF systems have two such
38 tags, more on that below).
39
40 Possible options to set the runtime shared library search path include
41 the following:
42
1dc1ea18
DDO
43 -Wl,-rpath,/whatever/path # Linux, *BSD, etc.
44 -R /whatever/path # Solaris
45 -Wl,-R,/whatever/path # AIX (-bsvr4 is passed internally)
46 -Wl,+b,/whatever/path # HP-UX
47 -rpath /whatever/path # Tru64, IRIX
c3d76bb2 48
445bc808 49 OpenSSL's configuration scripts recognise all these options and pass
2c879241 50 them to the Makefile that they build. (In fact, all arguments starting
1dc1ea18 51 with `-Wl,` are recognised as linker options.)
ed3f51ec 52 Please note that 'l' in '-Wl' is lowercase L and not 1.
445bc808
RL
53
54 Please do not use verbatim directories in your runtime shared library
55 search path! Some OpenSSL config targets add an extra directory level
56 for multilib installations. To help with that, the produced Makefile
57 includes the variable LIBRPATH, which is a convenience variable to be
58 used with the runtime shared library search path options, as shown in
59 this example:
c3d76bb2 60
16b0e0fc 61 $ ./Configure --prefix=/usr/local/ssl --openssldir=/usr/local/ssl \
445bc808
RL
62 '-Wl,-rpath,$(LIBRPATH)'
63
64 On modern ELF based systems, there are two runtime search paths tags to
1dc1ea18 65 consider, `DT_RPATH` and `DT_RUNPATH`. Shared objects are searched for in
445bc808
RL
66 this order:
67
1dc1ea18
DDO
68 1. Using directories specified in DT_RPATH, unless DT_RUNPATH is also set.
69 2. Using the environment variable LD_LIBRARY_PATH
70 3. Using directories specified in DT_RUNPATH.
71 4. Using system shared object caches and default directories.
445bc808 72
1dc1ea18
DDO
73 This means that the values in the environment variable `LD_LIBRARY_PATH`
74 won't matter if the library is found in the paths given by `DT_RPATH`
75 (and `DT_RUNPATH` isn't set).
c3d76bb2 76
1dc1ea18 77 Exactly which of `DT_RPATH` or `DT_RUNPATH` is set by default appears to
445bc808 78 depend on the system. For example, according to documentation,
1dc1ea18
DDO
79 `DT_RPATH` appears to be deprecated on Solaris in favor of `DT_RUNPATH`,
80 while on Debian GNU/Linux, either can be set, and `DT_RPATH` is the
445bc808
RL
81 default at the time of writing.
82
83 How to choose which runtime search path tag is to be set depends on
84 your system, please refer to ld(1) for the exact information on your
1dc1ea18 85 system. As an example, the way to ensure the `DT_RUNPATH` is set on
445bc808
RL
86 Debian GNU/Linux systems rather than DT_RPATH is to tell the linker to
87 set new dtags, like this:
88
16b0e0fc 89 $ ./Configure --prefix=/usr/local/ssl --openssldir=/usr/local/ssl \
445bc808 90 '-Wl,--enable-new-dtags,-rpath,$(LIBRPATH)'
2c879241
AP
91
92 It might be worth noting that some/most ELF systems implement support
93 for runtime search path relative to the directory containing current
1dc1ea18 94 executable, by interpreting `$ORIGIN` along with some other internal
2c879241
AP
95 variables. Consult your system documentation.
96
97 Linking your application
98 ------------------------
99
100 Third-party applications dynamically linked with OpenSSL (or any other)
101 shared library face exactly the same problem with non-default locations.
102 The OpenSSL config options mentioned above might or might not have bearing
103 on linking of the target application. "Might" means that under some
af33b200 104 circumstances, it would be sufficient to link with OpenSSL shared library
1dc1ea18 105 "naturally", i.e. with `-L/whatever/path -lssl -lcrypto`. But there are
2c879241
AP
106 also cases when you'd have to explicitly specify runtime search path
107 when linking your application. Consult your system documentation and use
108 above section as inspiration...
109
110 Shared OpenSSL builds also install static libraries. Linking with the
af33b200 111 latter is likely to require special care because linkers usually look
2c879241
AP
112 for shared libraries first and tend to remain "blind" to static OpenSSL
113 libraries. Referring to system documentation would suffice, if not for
114 a corner case. On AIX static libraries (in shared build) are named
1dc1ea18 115 differently, add `_a` suffix to link with them, e.g. `-lcrypto_a`.