Você não entendeu mal a numeração da versão, e essa é, de fato, uma área em que normalmente aparece o símbolo de pesquisa.
Quanto à responsabilidade de quem é esse, eu diria que nos sistemas modernos ele pertence a quem quer que construa o aplicativo, não a biblioteca: se você vincular o aplicativo com ld -z now
(pelo menos no GNU binutils), o vinculador dinâmico resolverá todos os símbolos na inicialização e falhará cedo se algum símbolo estiver faltando (portanto, não é necessário adicionar suas próprias verificações manuais). Você pode ativar esse comportamento após vincular um programa exportando LD_BIND_NOW=1
para o ambiente (qualquer valor não vazio funciona, e isso não é específico do Linux).
Esse tipo de problema é normalmente tratado pelos sistemas de gerenciamento de pacotes: eles mantêm metadados extensos descrevendo os requisitos de versão para símbolos e geram as dependências com controle de versão apropriadas. Também é possível que os autores da biblioteca ajudem a melhorar a situação, mas isso pode exigir muito esforço; veja os símbolos da versão especial do GNU libc (os símbolos GLIBC_...
que geralmente aparecem em mensagens de erro) e geralmente o tratamento completo dos símbolos com versão.