Direct binding

When linking a shared library or dynamic linked executable, the linker normally populates the symbol table for that library with all required symbols.

This kind of weak linking forces the dynamic linker to resolve which library contains which symbol when the executable is run.

The dynamic linker on Linux, for example, reads through the DT_NEEDED section of an ELF object and loads needed libraries; but isn't told where required symbols are.

For this, it must iterate through each unresolved symbol in the object, and for each of these, iterate through each loaded library, checking until it finds a matching symbol.

Direct linking works around this problem by storing an equivalent list of pointers to DT_NEEDED entries in a separate ELF section.