I'm reading the book linker and loader and I stumbled upon a weird concept called "static shared library". To quote
With static shared libraries, symbols are still bound to addresses at link time, but li- brary code isn’t bound to the executable until run time. (With dynamic shared libraries, they’re both delayed until runtime.)
However I never see people differentiate static/dynamic shared libraries in context outside of this book. Most people just point out the difference between static linking and dynamic linking. Apparently this book suggests there is more granularity under dynamic linking. Is this just an obsolete concept? The book was written 20 years ago.
The only concept that looks similar is prelink.
Yes, static shared libraries are obselete. To our ears "static shared library" sounds like a contradiction in terms, but in Linkers & Loaders (1999) this term is being retro-fitted to a type of library that was dated even then, and that in its day was an evolutionary branch from purely static libraries and linking toward dynamic libraries and linking. A branch that was fairly quickly out-competed, thanks to Moore's Law, by the kind of dynamic linkage and loading scheme that prevails today.
It's obvious that a shared library linkage and loading scheme is possible in which the static linker assigns addresses to external references into a shared library that are promised to match (or jump to) the addresses of that library's definitions at runtime on condition that the library appears at the right place in the program's address space.
It's equally obvious that such is scheme is woefully brittle. But around 40 years ago when the technicalities of modern dynamic linkage & loading were radically novel, the "static shared library" approach was by comparison conservative and incremental. Likewise when nearly all computers ran in the ballpark of 10-20MIPS and the usual rotating hard disc transfer rates were 1-2MB/s, the consideration of load time weighed heavily and bolstered reluctance to burden the program load with the amount of work that modern dynamic loading involves.
In 9.2 section of Linkers & Loaders (right after the section you quote from) you will find name-checked the historical systems that implemented static shared libraries, and following that for the rest of chapter 9 a presentation of how they were made to work and the challenges involved.