2010-01-18 21 views
9

Me pregunto cómo crear un programa independiente en C++?¿Cómo se crea un programa independiente en C++?

Edit: Por independiente quiero decir un programa que no se ejecuta en un entorno alojado (por ejemplo, SO). Quiero que mi programa sea el primer programa que cargue la computadora, en lugar del sistema operativo.

+2

Definir "independiente". ¿Quiere decir que no hay dependencias en las bibliotecas externas? ¿Para qué sistema operativo y entorno? –

+0

Independiente como en? Sin sistema operativo? No hay bibliotecas dinámicas? –

+0

@Josh Kelley: me refiero a un programa que es básicamente el primer programa cargado en una computadora (por ejemplo, el sistema operativo). Sé que la mayoría de la gente escribe un gestor de arranque en ASM, pero me preguntaba si es posible hacerlo en C++. –

Respuesta

10

Tener un vistazo a este artículo:

http://www.codeproject.com/KB/tips/boot-loader.aspx

Lo que necesitas un código de inicio de pequeña asamblea para llegar tan lejos como main(), pero entonces se podría escribir el resto en C++. Tendría que escribir su propio administrador de montón (nuevo/eliminar) si quería crear objetos en tiempo de ejecución y su propio programador si quería más de un hilo.

2

Incluso con su aclaración, la respuesta es que depende, la secuencia de inicio exacta depende del hardware, aunque hay bastantes coincidencias. El cargador de arranque generalmente se carga en una dirección absoluta, y el archivo en el que está contenido se lee frecuentemente en la memoria exactamente como está. Esto significa que en lugar de un enlazador normal, normalmente se usa un "localizador de enlaces". Cuando un enlazador típico produce un archivo ejecutable listo para su reubicación y carga, un localizador produce un ejecutable que ya está configurado para ejecutarse en una dirección exacta, con todas las reubicaciones ya aplicadas. Para aquellos que tienen la edad suficiente para recordarlos, por lo general es bastante parecido a un archivo .COM de MS-DOS.

Junto con eso, tiene que (por supuesto) vincular estáticamente todo el tiempo de ejecución del que depende el programa; no puede depender de algo así como una biblioteca DLL o de objeto compartido, porque el código para cargar cualquiera de aquellos que aún no se han cargado.

2

Google 'c incrustado ++' para un comienzo

Otra idea es comenzar con los emuladores de sistemas embebidos, por ejemplo, el sitio de Atmel AVR tiene un buen IDE los sistemas AVR Emulación de Atmel, y le permite construir código crudo en C y cargarlo en una CPU emulada, usan gcc como toolchain (creo)

2

C++ se usa en embedded systems programming, incluso para escribir kernels OS.

Por lo general, tiene al menos algunas instrucciones de ensamblador al principio de la secuencia de inicio. Algunas cosas son más fáciles de expresar de esa manera, o puede haber un código de referencia del proveedor de la CPU que necesita usar.

Para el proceso de inicio inicial, no podrá usar la biblioteca estándar. Sin excepciones, RTII, nuevo/eliminar. Está de vuelta a "C con clases". La mayoría de la gente simplemente usa C aquí.

Una vez que tenga suficiente infraestructura de soporte cargada, puede usar cualquier parte de la biblioteca estándar que pueda transferir.

2

Tendrá un entorno que proporciona:

  • Una biblioteca de trabajo C, o lo suficiente como para hacer lo que quiera
  • Las partes del tiempo de ejecución de C++ que tiene la intención de usar. Esto es específico del compilador

Además de cualquier otra biblioteca. Si no tiene un enlazador dinámico en su plataforma (si no tiene sistema operativo, probablemente no tenga un enlazador), tendrá que vincularlo estáticamente.

En la práctica, esto significa vincular un pequeño tiempo de ejecución de C++ y una biblioteca de C apropiada para su plataforma. Entonces simplemente puede escribir un programa C++ independiente.

0

Si estaba utilizando BSD Unix, se vincularía con la biblioteca independiente. Eso incluía un sistema IO básico para disco y tty. Su código fuente se veía igual que si se ejecutara bajo Unix, pero el binario podría cargarse en una máquina desnuda.

5

Ver esta página: http://wiki.osdev.org/C++

Tiene todo lo necesario para empezar a escribir un sistema operativo utilizando C++ como el núcleo del lenguaje usando las cadenas de herramientas más populares.

Además, esta página debería ser muy útil: http://wiki.osdev.org/C++_Bare_Bones. Te guiará bastante para llegar al punto de entrada de C++ de un sistema operativo.

Cuestiones relacionadas