the .a file and the .so file
the CMakeLists.txt
My guess is that .a file is a simple archive format for .o object files (which in turn are more or less a result of converting textual assembly into binary), while .so is a full-fledged ELF binary, which contains additional data sections and meta-data in the header.