The following table summarizes the actions performed by the static linker, which runs on the development host, and by the runtime linker, which runs on the target.
Link | Relocatable Executable | Dynamic executable |
Static Linker | .a Static linker adds necessary objects (.o) of a static library (.a) to the executable. | .a Static linker adds necessary objects (.o) of a static library (.a) to the executable. .so Static linker adds the library to the list of libraries to load at actor start-up (afexec). |
Runtime Linker (afexec) | - | .so At actor start-up, libraries are loaded and linked by the runtime linker. Libraries to load are defined either at static link, or in the LD_PRELOAD environment variable. The runtime linker uses a library search path to find dynamic and shared libraries. |
Runtime Linker (dlopen) | - | .so Application explicitly asks the runtime linker to dynamically load and link a dynamic library, using the dlopen() function of the dynamic linking API. |
Dynamic linking of libraries applies recursively to library dependencies: when a library is loaded, all the libraries it uses are also loaded.