LPI 101 Manage Shared Libraries [3]
(Linux Professional Institute Certication)
a .. /V\ // \\ @._.@ from IBM developerWorks tutorial geoffrey robertson
[email protected]$Id: gl1.102.4.slides.tex,v 1.4 2003/05/30 05:09:04 waratah Exp $
c 2002 Geoffrey Robertson, Andrew Eager. Permission is granted to make and distribute verbatim copies or modied versions of this document provided that this copyright notice and this permission notice are preserved on all copies under the terms of the GNU General Public License as published by the Free Software Foundationeither version 2 of the License or (at your option) any later version.
a Copyright
Manage Shared Libraries
Objective
Candidates should be able to determine the shared libraries that executable programs depend on and install them when necessary. Candidates should be able to state where system libraries are kept.
Manage Shared Libraries
Key les, terms, and utilities
ldd ldconfig /etc/ld.so.conf LD_LIBRARY_PATH
Manage Shared Libraries
Resources of interest
Shared-Library HOWTO : http://linuxdocs.org/HOWTOs/Program-Library-HOWTO/ LPI certication 102 exam prep, Part 1 : http://ibm.com/developerWorks
Introducing shared libraries
On Linux systems there are two fundamentally different types of Linux executable programs.
Introducing shared libraries
On Linux systems there are two fundamentally different types of Linux executable programs. statically linked executables : contain all the functions that they need to execute
5-a
Introducing shared libraries
On Linux systems there are two fundamentally different types of Linux executable programs. statically linked executables : contain all the functions that they need to execute dynamically linked executables : require libraries of functions
5-b
Static vs. Dynamic Executables
ldd
We can use the ldd command to determine if a particular executable program is static: $ ldd /sbin/sln not a dynamic executable
Static vs. Dynamic Executables
ldd
We can use the ldd command to determine if a particular executable program is static: $ ldd /sbin/sln not a dynamic executable
Relative Size
$ ls -l /bin/ln /sbin/sln -rwxr-xr-x 1 root root 23000 Jan 14 00:36 /bin/ln -rwxr-xr-x 1 root root 381072 Jan 14 00:31 /sbin/sln
6-a
Dynamically Linked Dependencies
To view a list of all the shared libraries upon which ln depends, use the ldd command: $ ldd /bin/ln libc.so.6 => /lib/libc.so.6 (0x40021000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Dynamically Linked Dependencies
To view a list of all the shared libraries upon which ln depends, use the ldd command: $ ldd /bin/ln libc.so.6 => /lib/libc.so.6 (0x40021000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) As a rule, dynamically linked programs are much smaller than their statically-linked equivalents.
7-a
Dynamically Linked Dependencies
To view a list of all the shared libraries upon which ln depends, use the ldd command: $ ldd /bin/ln libc.so.6 => /lib/libc.so.6 (0x40021000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) As a rule, dynamically linked programs are much smaller than their statically-linked equivalents. /lib/ld-linux.so.2 is the loader
7-b
The dynamic loader
The dynamic loader takes care of loading the shared libraries that dynamically linked executables need in order to run.
The dynamic loader
The dynamic loader takes care of loading the shared libraries that dynamically linked executables need in order to run. The dynamic loader nds shared libraries thanks to two les /etc/ld.so.conf and /etc/ld.so.cache.
8-a
The dynamic loader
The dynamic loader takes care of loading the shared libraries that dynamically linked executables need in order to run. The dynamic loader nds shared libraries thanks to two les /etc/ld.so.conf and /etc/ld.so.cache. The contents of /etc/ld.so.conf: cat /etc/ld.so.conf /usr/X11R6/lib /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.3 /usr/lib/mozilla /usr/lib/qt-x11-2.3.1/lib /usr/local/lib
8-b
ld.so.cache
Before the dynamic loader can see this information, it must be converted into an ld.so.cache le. This is done by running the ldcong command: $ ldconfig
When ldconfig completes, you now have an up-to-date /etc/ld.so.cache le that reects any changes youve made to /etc/ld.so.conf.
ldconfig tips
To view all the shared libraries that ldconfig can see, type: $ ldconfig -p | less
Sometimes, youll want to tell the dynamic loader to try to use shared libraries in a specic directory before trying any of your /etc/ld.so.conf paths. For older application requiring older libraries.
10
LD LIBRARY PATH
To instruct the dynamic loader to check a certain directory rst, set the LD LIBRARY PATH variable to the directories that you would like searched.
11
LD LIBRARY PATH
To instruct the dynamic loader to check a certain directory rst, set the LD LIBRARY PATH variable to the directories that you would like searched. Separate multiple paths using colons; for example: # export LD LIBRARY PATH="/usr/lib/old:/opt/lib"
11-a
LD LIBRARY PATH
To instruct the dynamic loader to check a certain directory rst, set the LD LIBRARY PATH variable to the directories that you would like searched. Separate multiple paths using colons; for example: # export LD LIBRARY PATH="/usr/lib/old:/opt/lib"
After LD LIBRARY PATH has been exported, any executables started from the current shell will use libraries in /usr/lib/old or /opt/lib if possible, falling back to the directories specied in /etc/ld.so.conf if some shared library dependencies are still unsatised.
11-b
Summary
ldd
12
Summary
ldd
Lists the required libraries
12-a
Summary
ldd
Lists the required libraries
ld.so.conf
12-b
Summary
ldd
Lists the required libraries
ld.so.conf
list of library paths
12-c
Summary
ldd
Lists the required libraries
ld.so.conf
list of library paths
ldconfig
12-d
Summary
ldd
Lists the required libraries
ld.so.conf
list of library paths
ldconfig
Updates /etc/ls.so.cache from ld.so.conf
12-e
Summary
ldd
Lists the required libraries
ld.so.conf
list of library paths
ldconfig
Updates /etc/ls.so.cache from ld.so.conf
LD LIBRARY PATH
12-f
Summary
ldd
Lists the required libraries
ld.so.conf
list of library paths
ldconfig
Updates /etc/ls.so.cache from ld.so.conf
LD LIBRARY PATH
Holds library path for current shell
12-g
The End Manage Shared Libraries . . . . . . . . . . . . . . . Introducing shared libraries . . . . . . . . . . . . . Static vs. Dynamic Executables . . . . . . . . . . . Dynamically Linked Dependencies . . . . . . . . . The dynamic loader . . . . . . . . . . . . . . . . . ld.so.cache . . . . . . . . . . . . . . . . . . . . . . ldconfig tips . . . . . . . . . . . . . . . . . . . LD LIBRARY PATH . . . . . . . . . . . . . . . . . Summary . . . . . . . . . . . . . . . . . . . . . . .
13
2 5 6 7 8 9 10 11 12