É comum, quando instalamos programas, arquivos de extensão *.a serem gerados.
Em alguns casos, porém, é necessário que seja gerado um arquivo .so pra se resolver problemas de dependências.
Exemplo:
$ gcc subrotinas.c
$ gcc subrotinas2.c
$ ld -shared -o libsubrotinas.so -lc subrotinas.o subrotinas2.o
Outro exemplo:
# file libssl.a
libssl.a: current ar archive
# ld -shared -o libssl.so -lc libssl.a
# file libssl.so
libssl.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped
# mv libteste.so /usr/lib
# mv libssl.so /usr/lib
# ldconfig
E pronto, sua nova biblioteca está pronta para ser usada