.so файл является динамической библиотекой, то есть он используется каждый раз, когда вы запускаете вашу программу. В этом случае вам нужно сообщить вашей ОС (в данном случае Mint), где находится эта динамическая библиотека, чтобы ваша программа могла найти ее во время выполнения.
Файл .a является статической библиотекой, то есть необходимые функции будут скопированы в вашу программу при компоновке. Таким образом, ваша программа может работать без файла библиотеки.
Если больше ничего не сказано, gcc будет считать, что вы хотите использовать динамическую библиотеку lib. Если он может найти файл .so, он будет использовать его вместо файла .a. Если вы хотите, чтобы gcc сделал вашу программу статичной (используйте файл .a), вы можете добавить -static к вашему вызову gcc.
Однако причина сбоя связывания при использовании динамической библиотеки неясна. Как вы установили / собрали библиотеку?