En realidad, estos términos pueden significar muchas cosas diferentes dependiendo del contexto en el que se usan.
Por ejemplo, en Mac OS X, los marcos son solo bibliotecas, agrupadas en un paquete. Dentro del paquete encontrará una biblioteca dinámica real (libWhatever.dylib). La diferencia entre una biblioteca simple y el framework en Mac es que un framework puede contener múltiples versiones diferentes de la biblioteca. Puede contener recursos adicionales (imágenes, cadenas localizadas, archivos de datos XML, objetos de interfaz de usuario, etc.) y, a menos que el marco se publique, generalmente contiene los archivos .h necesarios que necesita para usar la biblioteca.
Por lo tanto, tiene todo dentro de un solo paquete que necesita para usar la biblioteca en su aplicación (una biblioteca C / C ++ / Objective-C sin archivos .h es bastante inútil, a menos que los escriba usted mismo de acuerdo con alguna documentación de la biblioteca), en lugar de un montón de archivos para moverse (un paquete de Mac es solo un directorio en el nivel Unix, pero la interfaz de usuario lo trata como un solo archivo, más o menos como si tuviera archivos JAR en Java y cuando hace clic en él, generalmente no ve lo que hay dentro, a menos que seleccione explícitamente mostrar el contenido).
Wikipedia llama a framework una "palabra de moda". Define un marco de software como
Un marco de software es un diseño reutilizable para un sistema de software (o subsistema). Un marco de software puede incluir programas de soporte, bibliotecas de códigos, un lenguaje de secuencias de comandos u otro software para ayudar a desarrollar y pegar los diferentes componentes de un proyecto de software. Varias partes del marco pueden estar expuestas a través de una API.
Entonces diría que una biblioteca es solo eso, "una biblioteca". Es una colección de objetos / funciones / métodos (dependiendo de su idioma) y su aplicación "enlaza" contra él y, por lo tanto, puede usar los objetos / funciones / métodos. Básicamente es un archivo que contiene código reutilizable que generalmente se puede compartir entre múltiples aplicaciones (no tiene que escribir el mismo código una y otra vez).
Un marco puede ser todo lo que usa en el desarrollo de aplicaciones. Puede ser una biblioteca, una colección de muchas bibliotecas, una colección de scripts o cualquier pieza de software que necesite para crear su aplicación. Marco es solo un término muy vago.
Aquí hay un artículo sobre un tipo sobre el tema " Biblioteca vs. Framework ". Personalmente, creo que este artículo es muy discutible. No está mal lo que dice allí, sin embargo, solo está eligiendo una de las múltiples definiciones de marco y compara eso con la definición clásica de biblioteca. Por ejemplo, dice que necesita un marco para subclasificar. De Verdad? Puedo tener un objeto definido en una biblioteca, puedo vincularlo y subclasificarlo en mi código. No veo cómo necesito un "marco" para eso. De alguna manera, más bien explica cómo se usa el término marco hoy en día. Es solo una palabra publicitada, como dije antes. Algunas compañías lanzan solo una biblioteca normal (en cualquier sentido de una biblioteca clásica) y la llaman un "marco" porque suena más elegante.