Quando usar bibliotecas dinâmicas e quando usar bibliotecas estáticas em C++?
Olá a todos! Estou começando a entender C++ e a compilação de projetos, e fiquei confuso com as bibliotecas. Acho que entendi que existem bibliotecas estáticas (.lib, .a) e dinâmicas (.dll, .so), mas não consigo entender quando aplicar cada uma na prática.
Por exemplo, estou escrevendo um pequeno projeto — uma calculadora de console. Estou usando uma biblioteca para funções matemáticas (digamos, a minha própria). Se eu a vincular estaticamente, o código será copiado para o meu .exe. Se for dinamicamente, a biblioteca será um arquivo separado. Qual é a vantagem?
Na internet, dizem que bibliotecas estáticas tornam o exe maior, e as dinâmicas o tornam menor, mas essa não é a única diferença. Também ouvi que DLLs podem "quebrar" com atualizações, enquanto as estáticas não. Mas então por que as dinâmicas são necessárias, se são pouco confiáveis? E como vincular corretamente bibliotecas de terceiros, como Boost ou OpenGL? Preciso de uma solução que funcione tanto no Windows quanto no Linux.
Ajude-me, por favor, a entender. Dê exemplos.