Como os aplicativos são resolvidos para diferentes versões de bibliotecas compartilhadas em tempo de execução?

Eu sou um noob em como as bibliotecas compartilhadas funcionam no linux. Estou tentando entender como os aplicativos resolvem diferentes revisões da mesma biblioteca compartilhada em tempo de execução no linux.

Pelo que entendi, uma biblioteca compartilhada tem três "nomes", por exemplo,

libmy.so.1.2 (nome real, ou seja, o arquivo obj real)libmy.so.1 (SONAME, incorporado no arquivo obj real)libmy.so (nome do vinculador, fornecido ao vinculador no momento do link e incorporado no executável)

Quando você instala a biblioteca via LDCONFIG, ela cria os seguintes links simbólicos

(2) => (1)(3) => (2)

Agora, digamos que eu compile outra versão da mesma biblioteca com o seguinte nome real, libmy.so.2.0. O SONAME pelas diretrizes seria libmy.so.2.0

No momento do link do aplicativo, qual é o nome do vinculador que eu forneceria com o sinalizador "-l". Seguindo as diretrizes que li (http://www.dwheeler.com/program-library/Program-Library-HOWTO/x36.html), não teria que ser libmy.so e, se sim, como serão distinguidas as duas versões do arquivo obj?

questionAnswers(3)

yourAnswerToTheQuestion