Na verdade, esses termos podem significar muitas coisas diferentes, dependendo do contexto em que são usados.
Por exemplo, no Mac OS X, as estruturas são apenas bibliotecas, agrupadas em um pacote. Dentro do pacote configurável, você encontrará uma biblioteca dinâmica real (libWhatever.dylib). A diferença entre uma biblioteca simples e a estrutura no Mac é que uma estrutura pode conter várias versões diferentes da biblioteca. Ele pode conter recursos extras (imagens, seqüências de caracteres localizadas, arquivos de dados XML, objetos de interface do usuário etc.) e, a menos que a estrutura seja liberada ao público, ela geralmente contém os arquivos .h necessários para usar a biblioteca.
Portanto, você tem tudo em um único pacote que precisa usar a biblioteca em seu aplicativo (uma biblioteca C / C ++ / Objective-C sem arquivos .h é bastante inútil, a menos que você mesmo os escreva de acordo com alguma documentação da biblioteca), em vez de vários arquivos para mover (um pacote Mac é apenas um diretório no nível Unix, mas a interface do usuário o trata como um único arquivo, praticamente como se você tivesse arquivos JAR em Java e quando você clica nele, geralmente não vê conteúdo, a menos que você selecione explicitamente para mostrar o conteúdo).
A Wikipedia chama o framework de "palavra de ordem". Ele define uma estrutura de software como
Uma estrutura de software é um design reutilizável para um sistema (ou subsistema) de software. Uma estrutura de software pode incluir programas de suporte, bibliotecas de códigos, uma linguagem de script ou outro software para ajudar a desenvolver e colar os diferentes componentes de um projeto de software. Várias partes da estrutura podem ser expostas por meio de uma API.
Então, eu diria que uma biblioteca é apenas isso, "uma biblioteca". É uma coleção de objetos / funções / métodos (dependendo do seu idioma) e seu aplicativo "vincula" a ele e, portanto, pode usar os objetos / funções / métodos. É basicamente um arquivo que contém código reutilizável que geralmente pode ser compartilhado entre vários aplicativos (você não precisa escrever o mesmo código repetidamente).
Uma estrutura pode ser tudo o que você usa no desenvolvimento de aplicativos. Pode ser uma biblioteca, uma coleção de muitas bibliotecas, uma coleção de scripts ou qualquer software necessário para criar seu aplicativo. Framework é apenas um termo muito vago.
Aqui está um artigo sobre alguém sobre o tópico " Biblioteca versus estrutura ". Pessoalmente, acho que este artigo é altamente discutível. Não está errado o que ele está dizendo lá, no entanto, ele está apenas escolhendo uma das múltiplas definições de estrutura e a compara à definição clássica de biblioteca. Por exemplo, ele diz que você precisa de uma estrutura para subclassificação. Mesmo? Eu posso ter um objeto definido em uma biblioteca, posso vincular a ele e subclassificá-lo no meu código. Não vejo como preciso de uma "estrutura" para isso. De alguma forma, ele explica como o termo estrutura é usado atualmente. É apenas uma palavra sensacionalista, como eu disse antes. Algumas empresas lançam apenas uma biblioteca normal (em qualquer sentido de uma biblioteca clássica) e a chamam de "estrutura" porque parece mais sofisticada.