23 votos

¿Por qué se incluye la librería estándar de C++ con el compilador en lugar del sistema operativo?

Siento si esta es una pregunta ingenua, pero hay algo que no puedo conseguir mi cabeza alrededor.

¿Por qué la biblioteca estándar de C++ incluye las implementaciones del compilador diferentes ( g++ de libstdc++ y clang de libc++ ) en lugar de venir incluido con el sistema operativo (como UNIX), así como, decir la C biblioteca estándar hace? ¿Por qué no se mantiene junto a la biblioteca de C, considerando que es un superconjunto de él?

13voto

Chris Dodd Puntos 39013

La razón básica es que no hay ABI de C++ estándar, cada compilador tiende a tener su propio ABI que es distinto e incompatible con la de otros compiladores. Por otro lado, la mayoría sistemas operativos definen un ABI C estándar que usan y una biblioteca estándar de C para la fuente, y todos los compiladores de C para OS apoyan eso ABI.

10voto

En general, los sistemas operativos no admiten idiomas. Sólo apoyan para sus propias llamadas al sistema. En la mayoría de sistemas operativos este apoyo se proporciona como parte de la biblioteca de C porque C tiene el acoplamiento de nivel más bajo. Otros idiomas y tiempos de ejecución (como C++, python, etc.) construyen su soporte de tiempo de ejecución sobre biblioteca de soporte del sistema operativo sistema llamada.

9voto

rubenvb Puntos 27271

La biblioteca de C también se mantiene por separado: tanto glibc y Windows msvcr* (no conozco los detalles en Mac). El hecho de que se "viene con el sistema operativo" es que todos (la mayoría de) los binarios están vinculados en contra de ella, así que nada funcionaría sin él. Concedido, lo mismo podría decirse de la de la biblioteca estándar de C++, pero no es tan estricta.

El compilador proporciona a menudo extensiones de la biblioteca de escritores de uso para facilitar el desarrollo. Cuando una nueva característica se implementa, la biblioteca está adaptada. A veces estos cambios se están rompiendo. En el caso de glibc/libstdc++(/libc++?), compatibilidad hacia atrás, se mantiene dentro de la biblioteca (uso de versiones símbolos). En el caso de Windows' CRT, distintas versiones incompatibles aparecía de tanto en el C y el C++ estándar de bibliotecas, junto a cada versión del compilador. También: en el caso de Visual Studio, el compilador tiende a romper ABI entre versiones, por lo que "el sistema operativo" tendría que venir con todas las versiones de las bibliotecas.

PS: concedido, para Windows, podría haber sido "limpiador" para incluir nuevas CRT/C++lib versiones de Windows Update. Otras decisiones fueron tomadas camino de regreso cuando, y más atascado hasta ahora.

2voto

Kaz Puntos 18072

El código fuente de la biblioteca de C++ se incluye con el GCC fuentes. Esto tiene sentido, porque la biblioteca de C++ va de la mano con el lenguaje C++. No es un componente del sistema operativo. Ciertos aspectos de ella, como la administración de memoria y de e/S, de hacer de interfaz con el sistema operativo de las instalaciones, pero gran parte de ella no.

Por otro lado, el real de la paquetización de la biblioteca de C++ es el trabajo del sistema operativo distro (por ejemplo, el sabor de GNU/Linux).

En última instancia, es su distribución, la que decide cómo libstdc++ se envasa. Por ejemplo, podría tener sentido para que sea un paquete independiente (que incluso podrían necesita aparecer en varias versiones). Esto es debido a que libstdc++ proporciona una biblioteca compartida, y que la biblioteca compartida es necesario, como una dependencia por otros paquetes, si es o no un compilador instalado. Y algunos paquetes, sólo puede trabajar con una versión específica de esta biblioteca.

"Parte del sistema operativo" o "parte del compilador" realmente no tienen sentido: la pregunta es: "parte de lo paquete", y que es la distro específica, porque cuando se construye el GCC suite, su construcción de guiones luego se puede recoger aparte de la instalación temporal de árbol en arbitraria de paquetes basado en su visión de cómo organizar una distro.

Supongamos que hemos hecho una "ceeplusplusy" OS distro. A continuación, la biblioteca de C++ pueden ser consideradas y componente esencial del sistema operativo. Es decir, suponga que el núcleo de las aplicaciones que son necesarias para que el SO son todos reescrito en C++ y todo el uso de la biblioteca: cosas como un demonio del sistema, shell, "getty", y así sucesivamente. A continuación, la biblioteca de C++ es necesario en las primeras etapas de inicio. En última instancia, lo que es OS y qué no lo es?

0voto

gnasher729 Puntos 5011

En un Mac, se encuentra libc.dylib (biblioteca de C estándar) y libc ++ .dylib (biblioteca de C++ estándar) en el directorio/usr/lib. En un dispositivo iOS, usted no encontrar (fácilmente), pero ambos están allí también. Claramente, son no parte del compilador, ya que son esenciales para prácticamente todos los programas a ejecutar, y están presentes incluso si nunca ha instalado cualquier compiladores.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X