При компиляции и связывании программы с общей библиотекой компоновщик будет жаловаться, если не сможет найти .so-файл, на который вы ссылаетесь командой -l (libname)
Как может linux (и другиеОС) дистрибутивы делают репозитории с предварительно собранными пакетами, совместимыми с несколькими версиями библиотеки (например, v1.03.01 или выше), если человек, создающий пакет, не знает, какая конкретная версия будет на машине, устанавливающей пакети, следовательно, не знает, какой именно .so ссылаться при использовании тега -l?