.a - статические библиотеки.Если вы используете код, хранящийся внутри них, он берется из них и встраивается в ваш собственный двоичный файлВ Visual Studio это были бы файлы .lib.
.so - это динамические библиотеки.Если вы используете код, хранящийся внутри них, он не будет взят и встроен в ваш собственный двоичный файл.Вместо этого на него просто ссылаются, поэтому двоичный файл будет зависеть от них, и код из файла будет добавлен / загружен во время выполнения.В Visual Studio / Windows это будут файлы .dll (с небольшими файлами .lib, содержащими информацию о ссылках).