Creating and Using Shared Libraries on Linux course outline
- Course Introduction
- Fundamentals of Shared Libraries
- Background
- Basics of shared library creation and use
- The shared library soname
- Summary: shared library creation, linking, and loading
- Versioning and installation
- Shared library versioning
- Shared library real names, sonames, and linker names
- Installing shared libraries
- ldconfig
- Further details
- The Dynamic Linker
- Rpath: specifying library search paths in an object
- Finding shared libraries at run time
- Symbol resolution, library load order, and link maps
- Debugging the operation of the dynamic linker
- Shared Libraries and the Static Linker
- How the static linker finds shared libraries
- Correctly handling secondary dependencies at link time
- ELF and Program Execution
- Introduction
- ELF file layout
- ELF sections
- Useful commands: readelf and objdump
- How programs get run
- Dynamically Loaded Libraries (dlopen)
- Overview
- Opening a shared library: dlopen()
- Obtaining the address of a symbol: dlsym()
- The dlopen API: example
- The dlopen API: further details
- Symbol Visibility
- Controlling symbol visibility
- Using version scripts to control symbol visibility
- Preloading shared libraries
- Weak symbols (*)
- Symbol Versioning
- Introduction
- Creating a symbol-versioned library
- Transitioning an existing library to symbol versioning
- Advantages of symbol versioning
- Symbol versioning: further details
- GOT, PLT, and Lazy Binding (*)
- The GOT and PLT
- Lazy binding
- Lazy binding and the PLT: in pictures
- Lazy binding and the PLT: code
- Performance considerations
Return to the course overview