Cuándo usar bibliotecas dinámicas vs. estáticas

Al crear una biblioteca de clases en C ++, puede elegir entre dinámica (.dll, .so) y estática (.lib, .a) bibliotecas. ¿Cuál es la diferencia entre ellos y cuándo es apropiado usar cuál?