Isso não será tão profundo, mas este é um bom lugar para observar algumas coisas que estou aprendendo ao começar a construir projetos de código aberto.
Eu tinha assumido anteriormente que uma biblioteca compilada era tão boa quanto outra, a principal diferença sendo se você está trabalhando no Windows ou no Linux, ou seja, desde que uma biblioteca tenha sido construída no Windows, você pode vinculá-la a qualquer outro projeto do Windows, e da mesma forma para Linux.
Oh, a tristeza ao perceber minha ingenuidade. Estou enfrentando alguns problemas tristes enquanto estou trabalhando em um projeto no Windows usando mingw-w64 para que eu possa usar os recursos do C ++ 11 que o Visual Studio não implementou. Ainda estou resolvendo todos os detalhes, então esta não é uma nota oficial ou completa, mas aprendi o seguinte:
Diferentes compiladores podem gerar bibliotecas binárias incompatíveis, especialmente em C ++. A situação é aparentemente mais agradável com bibliotecas compiladas em C, mas aparentemente não há um padrão binário para bibliotecas C ++ geradas, então um compilador pode gerar nomes mutilados completamente diferentes (a maneira como hierarquias de classes e namespaces são nivelados em um único namespace global ) de outro. Compiladores diferentes também lidam com exceções de forma diferente no nível binário, então, por exemplo, exceções lançadas de uma biblioteca construída por um compilador podem não ser capturadas ou percebidas quando vinculadas a um projeto em um compilador diferente.