A library is code, data, fixups (I think that's the wrong word, sorry) and
a little bit of red tape for the file format.
Fixups are changes to be made at runtime by the dynamic linker in order to
make sure the code and calls work correctly at the runtime-assigned
address(es). It may include loading subsidiary libraries. (The
compiler/linker may optimise the library for a particular address, but the
address-independency work is still done in principle.)
Data is static variables, values of constant strings and such.