Like the title says, what is the difference between a "program object file" (.o extension) and a "library file" (.so extension)