¿Cómo especificar la versión de la biblioteca para usar en el momento del enlace?

Siguiente pregunta ¿Cómo se resuelven las aplicaciones a diferentes versiones de bibliotecas compartidas en tiempo de ejecución? , Me pregunté cómo especificar en la línea de comando del enlace qué versión de la biblioteca usará.

Digamos que tengo

libmy.so.1.0 libmy.so.1 -> libmy.so.1.0 libmy.so.2.0 libmy.so.2 -> libmy.so.2.0 libmy.so -> libmy.so.2 

La forma habitual de especificar la biblioteca para vincular con el ejecutable no muestra la versión que se utilizará. Además, es muy probable que uno quiera vincularse con la versión más reciente. Por lo tanto, la línea habitual funciona bien en la mayoría de los casos.

 gcc app.o -lmy -o app 

¿Cuál es la línea de comando para vincular la app que debería usar la versión 1 de la biblioteca?

El enlazador también puede aceptar nombres de archivos

 gcc app.o -l:libmy.so.1 -o app 

Del man ld :

-l namespec
–library = namespec
Agregue el archivo de archivo o objeto especificado por namespec a la lista de archivos para vincular. Esta opción se puede usar cualquier cantidad de veces. Si namespec tiene el formato: nombre de archivo, ld buscará en la ruta de la biblioteca un archivo llamado nombre de archivo , de lo contrario buscará en la ruta de la biblioteca un archivo llamado libnamespec.a.

Noté que las versiones anteriores no son compatibles, así que verifique la opción man ld -l o --library en su sistema.

También puede vincular el archivo mencionando su nombre completo

 gcc app.o /mylibpath/libmy.so.1 -o app