Escribiendo programas de consola en c linux. Programación Linux. Cómo funciona la compilación

Quedó claro que el tema es muy relevante. Se tuvieron en cuenta algunos errores y preguntas, como resultado, se decidió realizar una segunda clase magistral. Añadido y corregido!

Clase magistral de programación en C bajo Linux. Estudiamos la API principal.

Este tutorial está destinado a personas que desean aprender la API *nix de sistemas operativos similares, en particular bajo Linux. Aquí consideraremos las características del desarrollo bajo el sistema operativo Linux, que incluyen:


  • Familiarización con el proceso de creación de software y las especificaciones del compilador C de GCC

  • Desarrollo y uso de bibliotecas compartidas

  • Programas de depuración

  • Exploración de mecanismos de E/S de archivos de bajo nivel

  • Estudiar mecanismos para asegurar la multitarea y la comunicación entre procesos

  • Uso de archivos y sockets de red

  • Estudio y aplicación del mecanismo de las señales.

  • El estudio de procesos, subprocesos, su diferencia, el uso de subprocesos múltiples, el estudio de mecanismos de sincronización de subprocesos y sus problemas.

  • Creando demonios, aprendiendo la diferencia entre demonios y software de aplicación

  • Exploración de las funciones de E/S de la consola

  • Archivos mapeados en memoria y cómo usarlos

Esta clase magistral está destinada principalmente a desarrolladores de software, ingenieros, programadores y aficionados interesados ​​en el dispositivo y las especificaciones del sistema operativo Linux.

Requisitos para los participantes de la clase magistral: Conocimiento del lenguaje C, al nivel del libro BV Kernighan, D. M. Ritchie "LENGUA C".

El costo de esta clase magistral será de 6.000 rublos.

La sede es la ciudad de Moscú, en las instalaciones de Hackspace Neuron.
Fechas: Aproximadamente del 4 de julio (lunes) al 7 de julio (jueves) de 10:00 a 17:00 horas con pausa para comer y pausas para té y café.

La transmisión en línea no está prevista.
Número de personas en el grupo: 8-10.

El registro es por correo electrónico. [correo electrónico protegido] o comentar en esta publicación. Su nombre completo es requerido para el registro. (en su totalidad) y datos de contacto (número de teléfono y correo). Es conveniente describir el propósito de asistir a esta clase magistral, el nivel de formación y ocupación.

Programa detallado del curso:

Módulo 1: Introducción


  • Familiarización con las especificaciones de creación de software en GNU/Linux

  • Familiarización con los editores de texto de la consola (vi, nano, mcedit)

  • Trabajando con el depurador gdb

  • Montaje de software manual y automático (Makefile)

  • Modelo Cliente-Interfaz-Servidor (CIS)

  • Edificio de biblioteca estática

  • Bibliotecas compartidas

  • Trabajar con variables de entorno

Módulo 2: E/S de bajo nivel y operaciones de archivo

  • Descripción general de los mecanismos de E/S de Linux (Ubuntu)

  • Descriptores de archivo

  • Llamadas al sistema: abrir, cerrar, escribir, leer y lseek

  • Tipos de archivo

  • Inodos y enlaces duros

  • Permisos de archivo

  • sistema de archivos proc

  • Dos formas de leer el contenido de un directorio

  • Archivos dispersos y detalles de su uso.

  • Bloqueo de áreas de un archivo

Módulo 3

  • Mecanismos de comunicación entre procesos de Linux (Ubuntu)

  • Tuberías sin nombre (tuberías)

  • Tuberías con nombre

  • Mensajes (cola de mensajes)

  • Memoria compartida

  • Semáforos

Módulo 4

  • Sockets en un espacio de nombres de archivo (sockets UNIX)

  • Par de enchufes

  • Tomas de red (sockets)

Módulo 5. Señales

  • Introducción a las señales

  • Cómo las señales difieren de otros mecanismos de comunicación entre procesos

  • Especificaciones del manejo de la señal

  • Módulo 6

  • Procesos de clonación - fork()

  • Reemplazo de un proceso en ejecución - exec()

  • Zombis (zombis): causas y formas de eliminarlos

Módulo 7

  • Hilos y procesos

  • Los detalles de la creación de aplicaciones multihilo (multihilo)

  • Terminar un hilo antes de tiempo

Módulo 8 - Hilos (continuación)

  • Crear un controlador de terminación de subprocesos

  • Sincronizar primitivas

  • Atributos de transmisión

Módulo 9: Demonios (Servicios)

  • La diferencia entre un demonio y una utilidad de consola

  • Especificaciones de desarrollo de demonios

  • Creación de un daemon usando sockets de red

Módulo 10: E/S de consola

  • Especificaciones del desarrollo de aplicaciones de consola

  • Prevención de la redirección de salida

  • Gestión de terminales

  • Ocultar la contraseña del usuario durante la autenticación

  • Control de terminal con secuencias ESC

Módulo 11

  • Visualización de un archivo normal

  • Compartir un archivo

  • exhibiciones privadas

  • Otros usos de mmap

Módulo 12

  • Detalles del desarrollo de aplicaciones de 64 bits

  • Uso de la biblioteca ncurses

Líder del curso: Sergey Dolin. Ingeniero electrónico, desarrollador de software linux (software aplicado, test para hardware, drivers). Desarrollador de software embebido. Programador Linux desde 2011. Trabajó en OAO NICEVT, JSC Concern Systemprom, OOO PROSOFT (en una subsidiaria de Dolamant).

C es un lenguaje de programación bastante "antiguo", se formó a principios de los años 70. A pesar de esto, C es un lenguaje vivo en el sentido de que se usa activamente en la actualidad. Fue concebido, utilizado y se utiliza para escribir partes esenciales del código del programa de los sistemas operativos similares a Unix. También se escriben utilidades, compiladores y, con menos frecuencia, programas de aplicación. Por lo tanto, C se llama el lenguaje de programación del sistema.

Su capacidad de supervivencia se puede explicar por el hecho de que los principios de funcionamiento de los sistemas operativos son relativamente universales, no están sujetos al progreso y la diversidad que se puede observar en el entorno del software de escritorio y móvil, aplicaciones web. C no es un lenguaje de nivel lo suficientemente alto, está más cerca de la arquitectura informática. Como resultado, los programas en C son compactos y rápidos.

C no admite la programación orientada a objetos. El soporte de programación orientada a objetos se implementa en C++. Aunque este último evolucionó del lenguaje C, no es una "secuela" del mismo, sino un lenguaje separado que se puede aprender sin saber C. Sin embargo, aprender C es útil antes de conocer a su "hermano pequeño avanzado", porque la sintaxis de los lenguajes es similar, C no sobrecarga el cerebro de un programador novato con superpoderes y les enseña a entender la esencia de lo que está pasando.

¿Es C bueno para una primera introducción a la programación? Si no estás estudiando en una universidad en una especialidad relacionada con TI, entonces no. C implica una comprensión de la organización y los principios de funcionamiento del hardware, en particular de la memoria. Mucho de esto se hace con punteros, juegan un papel clave; este tema es bastante difícil de entender y no se suele estudiar en la escuela.

Por supuesto, con C, puede aprender los conceptos básicos de programación sin tener que aprender sobre punteros. Sin embargo, una persona pensará que conoce C, sabiendo poco sobre él per se. El lenguaje C fue creado por programadores profesionales expertos en hardware para escribir el sistema operativo UNIX. No fue pensado como un lenguaje para enseñar a principiantes.

Entornos y compiladores para programación en C

Si está utilizando una de las distribuciones de GNU/Linux, cualquier editor de texto con resaltado de sintaxis funcionará, y también necesitará GCC y una terminal.

Hay editores para programadores que incluyen varios complementos, como terminal, navegación de directorios y otros, por ejemplo, Geany o Atom.

C es un lenguaje de programación compilado. GNU/Linux usa GCC para obtener archivos ejecutables, un conjunto de compiladores, incluido un compilador para C. Para obtener un archivo ejecutable de un archivo fuente (por lo general, estos archivos tienen la extensión *.c), debe ejecutar un comando en la terminal que se parece a esto:

gcc -o hola hola.c

Donde gcc es un comando que inicia un programa que realiza la compilación y otras acciones; -o es una clave que indica que estamos especificando manualmente el nombre del archivo ejecutable; hola es el nombre del archivo ejecutable resultante; hola.c es el nombre del archivo de código fuente. El nombre del archivo ejecutable se puede omitir:

gcc hola.c

En este caso, el ejecutable tendrá el nombre predeterminado a.out.

Windows tiene su propio conjunto de compiladores: MinGW. Se puede usar solo, pero viene con un entorno de desarrollo Dev-C++ simple, que puede ser una buena opción para aprender a programar en C y C++.

Al guardar, seleccione el tipo de archivo "Archivos fuente C (*.c)". La compilación y ejecución del programa se realiza presionando la tecla F9. Después de la ejecución, el programa se cierra inmediatamente y no se puede ver el resultado. Para evitar que esto suceda, se escriben dos líneas adicionales: #include y obtener(). (Quizás esto no sea relevante para una versión más nueva de Dev-C++).

"Hola Mundo" en GNU/Linux:

#incluir \norte") ; }

"Hola Mundo" en Windows:

#incluir #incluir int main() ( printf("Hola Mundo \norte") ; obtener(); )

Por otro lado, existe una gran cantidad de entornos de desarrollo multiplataforma. Por ejemplo, módulo Eclipse + CDT, KDevelop, CLion. Este último es de pago, producido por JetBrains, líder en desarrollo de IDE, pero tiene un período de prueba de 30 días, que puede ser suficiente para aprender. CLion es más conveniente que otros IDE.

"Hola mundo" en C

Usando el programa más simple como ejemplo, notamos inmediatamente algunas características del lenguaje de programación C.

En el lenguaje C, la función main() asume el papel de la rama principal del programa. Esta función siempre debe estar presente en un programa completo en C, y la ejecución del programa comienza a partir de ella. Sin embargo, las variables declaradas dentro no son globales, su alcance se extiende solo a main(). Sin embargo, en el lenguaje de programación C, casi todo el código del programa está contenido en una función, y la función main() es la función principal y obligatoria.

De forma predeterminada, la función main() devuelve un tipo de datos int, por lo que no tiene que especificar el tipo de datos de retorno. Sin embargo, el compilador emite una advertencia en este caso.

La función printf() es para generar datos. Su propósito es similar al procedimiento write() en Pascal y la función print() en Python. La función printf() no se divide en una nueva línea después de la salida. Por lo tanto, se usa un carácter especial para saltar, que se indica con la combinación \n. Las expresiones C completas están separadas por punto y coma.

En C, las funciones de E/S no forman parte del lenguaje. Por ejemplo, en Python no necesitamos importar ningún módulo para usar las funciones print() e input(). En C, no podemos simplemente llamar a la función printf(), porque simplemente no existe en C en sí. Esta función, así como muchas otras, se puede incluir mediante el archivo de encabezado stdio.h. Para ello, al principio del programa, la línea #incluir . Incluir se traduce del inglés como "incluir", y stdio es una abreviatura de "entrada-salida estándar (entrada-salida)".

Los archivos de encabezado (que terminan en *.h) generalmente contienen declaraciones de ciertas funciones. Una declaración es simplemente una descripción de una función: qué parámetros toma y qué devuelve. El código de función en sí (definición) no está en el archivo de encabezado, sino en bibliotecas (otros archivos) que ya pueden estar compilados y ubicados en directorios del sistema. Antes de compilar el programa, se inicia el preprocesador C. Entre otras cosas, incluye el contenido de los archivos de encabezado especificados en el archivo de programa al principio del archivo de programa.

Trabajo practico

Comente la primera línea del código del programa HelloWorld. Intenta compilar el programa. ¿Pudiste obtener el ejecutable? ¿Qué advertencia emitió el compilador?

1 // - comentario de una sola línea en lenguaje C; /* … */ - comentario de varias líneas en lenguaje C.

Muchos programadores novatos tienen miedo
programación linux - sin la simplicidad de windows
y visibilidad. Sin embargo, para Linux hay
muchas ayudas visuales
programación, y no es solo un clon de Delphi.
Por supuesto, no pueden volverse completos.
un reemplazo para el mismo Visual Studio, pero bastante
ayudar a acelerar el proceso de desarrollo
programas

NetBeans

Uno de los mejores IDE. Destinado a
trabajar con Java, con su ayuda puedes
desarrollar no solo multiplataforma
Programas Java, pero también aplicaciones web, servicios web y
clientes para ellos, programas J2ME, etc. Quizás
trabajar en Windows, Linux, MacOS. IDE se puede extender
varios complementos y complementos que puede
encontrar en el sitio. Al mismo tiempo, todo es gratis, entonces
comer gratis! En general, un número indiscutible
una.

Diseñador QT/KDevelop

Otro potente entorno de desarrollo para
Plataforma KDE y Gnome. C++ multiplataforma
las aplicaciones van sólo de una manera. Para
Los programas Qt no comerciales pueden
uso gratis, existe
para casi todas las distribuciones.

Clon de Visual Basic, y no solo en diseño,
sino también en las construcciones del lenguaje. Ideal
herramienta para programadores de VB que quieren
cambiar a Linux. Interfaz sencilla y fácil de usar.
Acceso a todas las bases de datos principales - MySQL,
PostgreSQL, etc Funciona en casi todos
distribuciones.

Editor WYSIWYG para la creación de páginas web. En
muy parecido al editor de Macromedia o lo que sea
el mismo FrontPage. Soporta automático
trabajar con el sitio a través de FTP.

Python y Ruby IDE que hace
programación en un lenguaje bastante simple
y emocionante. Escrito en propio
Pitón.

Eclipse no es un IDE en absoluto, sino una plataforma completa para
varias aplicaciones. al estándar
la entrega incluye complementos adicionales para
Soporte y desarrollo del lenguaje Java (JDT)
complementos para Eclipse (PDE - Entorno de desarrollo de complementos). Para
trabajar con otros idiomas debe ser
complementos especiales instalados - en Eclipse
puede trabajar en casi cualquier
Lenguaje de programación accesible. Otro
ventaja también se aplica a
extensibilidad: cantidad gigantesca
utilidades (especialmente para Java) ahora
también disponible como complementos para Eclipse,
por ejemplo, Ant, JavaDoc, JUnit, JDepend, Check Style, Subversion.
Así que no tenemos que rendirnos
su sistema de control de versiones, desde su
verificadores de calidad de código, etc.
La tercera ventaja es que Eclipse es
entorno multiplataforma, es decir
Hay versiones para varios
sistemas operativos (que no pueden
permitirse el mismo Visual Studio).

JDeveloper

Plataforma de Oracle: no de código abierto,
sin embargo, sigue siendo gratis. Como es claro de
los nombres todavía son utilizados por la misma multiplataforma
Java. Utiliza Sun JDK para ejecutarse, por lo que
Oracle no reclama lo creado
los programas en teoría no tendrán.

Y por último, el entorno de control visual.
proyectos para Gnome Desktop. No menos útil
programa para programadores que IDE.

Las herramientas utilizadas tradicionalmente para escribir programas para sistemas operativos abiertos son las herramientas de desarrollo GNU. Hagamos un poco de contexto histórico. El Proyecto GNU fue fundado en 1984 por Richard Stallman. Su necesidad se debió a que en aquella época la cooperación entre programadores era difícil, ya que los propietarios de software comercial ponían numerosos obstáculos a dicha cooperación. El objetivo del proyecto GNU era crear un conjunto de software bajo una sola licencia que no permitiera a nadie asignar derechos exclusivos sobre este software. Parte de este kit es el kit de herramientas para desarrolladores que usaremos, que debe incluirse con todas las distribuciones de Linux.

Una de estas herramientas es el compilador GCC. Este acrónimo originalmente significaba GNU C Compiler. Ahora significa - Colección de compiladores GNU.

Creemos el primer programa usando GCC. Por tradición, el primer programa simplemente imprimirá el saludo "¡Hola mundo!" - "¡Hola Mundo!".

Los archivos de código fuente para los programas que crearemos son archivos de texto sin formato y se pueden crear con cualquier editor de texto (p. ej., GEdit KWrite, Kate y los usuarios de Linux más tradicionales vi y emacs). Además de los editores de texto, existen entornos de desarrollo especializados con sus propios editores integrados. Una de esas herramientas es KDevelop. Curiosamente, tiene un editor integrado y una consola integrada ubicada justo debajo del editor. Entonces puede directamente en un programa, sin cambiar entre ventanas, y editar el código y dar comandos de consola.

Cree un directorio de saludo separado. Este será nuestro primer directorio de proyectos. En él, crea un archivo de texto hello.c con el siguiente texto:

#incluir

printf("¡Hola mundo!\n");

Luego, en la consola, vaya al directorio del proyecto. Marca un equipo

Ahora mira de cerca lo que pasó. Ha aparecido un nuevo archivo a.out en el directorio. Este es el archivo ejecutable. Vamos a lanzarlo. Escriba en la consola:

El programa debería iniciarse, es decir, debería aparecer el texto:

El compilador gcc asigna el nombre a.out a todos los ejecutables generados por defecto. Si desea nombrarlo de manera diferente, debe agregar el indicador -o y el nombre que desea asignarle al comando de compilación. Escribamos el siguiente comando:

gcc hola.c -o hola

Vemos que ha aparecido en el directorio un archivo ejecutable llamado hello. Vamos a lanzarlo.

Como puede ver, el resultado es exactamente el mismo archivo ejecutable, solo que con un nombre conveniente para nosotros.

El indicador -o es solo uno de los muchos indicadores del compilador gcc. Algunas otras banderas se discutirán más adelante. Puede usar el sistema de ayuda man para ver todas las banderas posibles. Escriba en la línea de comando:

Se le presentará un sistema de ayuda para este programa. Repase lo que significa cada bandera. Pronto conoceremos a algunos de ellos. Se sale del sistema de ayuda con la tecla q.

Por supuesto, notó que cuando ejecutamos un programa desde nuestro directorio de desarrollo, escribimos un punto y una barra antes del nombre del archivo. ¿Por qué estamos haciendo esto?

El caso es que si tecleamos únicamente el nombre del archivo ejecutable, el sistema operativo lo buscará en los directorios /usr/bin y /usr/local/bin, y, por supuesto, no lo encontrará. Los directorios /usr/bin y /usr/local/bin son los directorios del sistema donde se encuentran los programas ejecutables. El primero está diseñado para albergar versiones estables de programas, generalmente incluidos en una distribución de Linux. El segundo es para programas instalados por el propio usuario (cuya estabilidad nadie garantiza). Se necesita un sistema de este tipo para separarlos entre sí. De forma predeterminada, los programas se instalan en el directorio /usr/local/bin cuando se compilan. Es altamente indeseable poner cualquier cosa adicional en /usr/bin o eliminar cualquier cosa de allí manualmente, porque esto puede provocar un bloqueo del sistema. Deben colocarse programas, de cuya estabilidad son responsables los desarrolladores de la distribución.

Para ejecutar un programa ubicado en otro lugar, debe especificar la ruta completa, así:

/home/dima/proyectos/hola/hola

O otra opción: escriba la ruta relativa al directorio actual en el que se encuentra actualmente en la consola. En este caso, un punto significa el directorio actual, dos puntos, el directorio principal. Por ejemplo, el comando ./hello ejecuta el programa hello ubicado en el directorio actual, el comando ../hello ejecuta el programa hello ubicado en el directorio principal, el comando ./projects/hello/hello ejecuta el programa en subdirectorios ubicados dentro el directorio actual.

Es posible agregar directorios adicionales a la lista de rutas del sistema a los programas. Para hacer esto, agregue una nueva ruta a la variable de sistema PATH. Pero no nos desviemos del tema principal por ahora. Las variables de entorno son una conversación separada.

Ahora veamos lo que hace el programa gcc. Su trabajo incluye tres etapas: preprocesamiento, compilación y enlace (o linking).

El preprocesador incluye el contenido de todos los archivos de encabezado especificados en las directivas #include en el archivo principal. Los archivos de encabezado generalmente contienen declaraciones de funciones utilizadas en el programa, pero no definidas en el texto del programa. Sus definiciones están en otro lugar: ya sea en otros archivos fuente o en bibliotecas binarias.

La segunda etapa es la compilación. Consiste en convertir el texto del programa en lenguaje C/C++ en un conjunto de instrucciones de máquina. El resultado se almacena en un archivo de objeto. Por supuesto, en máquinas con diferentes arquitecturas de procesador, los binarios se obtienen en diferentes formatos, y en una máquina es imposible ejecutar un binario construido en otra máquina (a menos que tengan la misma arquitectura de procesador y los mismos sistemas operativos). Es por eso que los programas para sistemas tipo UNIX se distribuyen como códigos fuente: deben estar disponibles para todos los usuarios, independientemente de quién tenga qué procesador y qué sistema operativo.

La última etapa es el diseño. Consiste en vincular todos los archivos de objetos de un proyecto en uno, vincular las llamadas de función a sus definiciones y adjuntar archivos de biblioteca que contienen funciones que se llaman pero no están definidas en el proyecto. Como resultado, se forma un archivo ejecutable: nuestro objetivo final. Si se usa una función en un programa, pero el enlazador no encuentra el lugar donde se define esta función, emitirá un mensaje de error y se negará a crear un archivo ejecutable.

Ahora veamos cómo se ve todo en la práctica. Escribamos otro programa. Será la calculadora más primitiva capaz de sumar, restar, multiplicar y dividir. Cuando se inicie, le pedirá dos números a la vez para operar y luego le pedirá que ingrese el signo de la operación aritmética. Puede tener cuatro caracteres: "+", "-", "*", "/". Después de eso, el programa muestra el resultado y se detiene (nos devuelve al sistema operativo, o mejor dicho, al intérprete de comandos desde el que llamamos al programa).

Vamos a crear una nueva carpeta kalkul para el proyecto y crear el archivo kalkul.c en ella.

#incluir

printf("Primer numero: ");

scanf("%f",&num1);

printf("Segundo número: ");

scanf("%f",&num2);

printf(" Operador (+ - * /): ");

while ((op = getchar()) != EOF)

printf("%6.2f\n",num1 + numero2);

si no (op == "-")

printf("%6.2f\n",num1 - numero2);

si no (op == "*")

printf("%6.2f\n",num1 * numero2);

más si (op == "/")

printf("Error: division por cero!\n");

descanso;

printf("%6.2f\n",num1 /num2);

Entonces, en primer lugar, como se dijo, se realiza el preprocesamiento. Para ver lo que se está haciendo en esta etapa, usaremos la opción -E. Esta opción detiene la ejecución del programa en la etapa de procesamiento por parte del preprocesador. El resultado es un archivo de código fuente con el contenido de los archivos de encabezado incluidos.

En nuestro caso, incluimos un archivo de encabezado, stdio.h, una colección de funciones de E/S estándar. Estas funciones envían el texto deseado a la consola y también leen las palabras que ingresamos desde la consola.

Introduzca el siguiente comando:

gcc -E kalkul.c -o kalkul.cpp

Llamamos al archivo resultante kalkul.cpp. Abrelo. Tenga en cuenta que es bastante largo. Esto se debe a que incluía todo el código en el archivo de encabezado stdio.h. Además, el preprocesador agregó aquí algunas etiquetas que le indican al compilador cómo comunicarse con las funciones declaradas. El texto principal de nuestro programa es visible solo en la parte inferior.

También puede ver qué otras funciones se declaran en el archivo de encabezado stdio.h. Si desea información sobre una función en particular, puede preguntar sobre ella en el hombre incorporado. Por ejemplo, si de repente quieres saber qué hace la misteriosa función fopen, puedes escribir:

También hay mucha información en la información del sistema de ayuda.

También puede preguntar sobre el archivo de encabezado completo a la vez.

Veamos ahora el siguiente paso. Vamos a crear un archivo de objeto. Un archivo de objeto es una traducción "textual" de nuestro código de programa a lenguaje de máquina, pero sin vincular las funciones llamadas con sus definiciones. La opción -c se utiliza para generar un archivo de objeto.

El nombre del archivo resultante se puede omitir, ya que el compilador simplemente toma el nombre del archivo fuente y cambia la extensión .c a .o (puede especificar si queremos nombrarlo de otra manera).

Si estamos creando un archivo de objeto a partir de una fuente que ya ha sido procesada por el preprocesador (como la que obtuvimos arriba), entonces debemos indicar explícitamente que el archivo que se está compilando es un archivo de código fuente que ha sido procesado por el preprocesador. y tiene etiquetas de preprocesador. De lo contrario, se procesará como un archivo C++ normal, sin etiquetas de preprocesador, lo que significa que no se establecerá la relación con las funciones declaradas. La opción -x se usa para indicar explícitamente el idioma y el formato del archivo que se está procesando. El archivo C++ procesado por el preprocesador se indica mediante cpp-output.

gcc -x cpp-salida -c kalkul.cpp

Finalmente, el último paso es el diseño. Obtenemos el ejecutable del archivo objeto.

gcc kalkul.o -o kalkul

Puedes ejecutarlo.

Usted pregunta: “¿Por qué todo este alboroto con las etapas intermedias? ¿No sería mejor ejecutar gcc kalkul.c -o kalkul una vez?"

El hecho es que los programas reales rara vez constan de un solo archivo. Como regla general, hay varios archivos fuente y se combinan en un proyecto. Y en algunos casos excepcionales, el programa debe ensamblarse a partir de varias partes escritas en diferentes idiomas. En este caso, debe ejecutar compiladores de diferentes idiomas para que cada uno obtenga un archivo de objeto de su fuente y luego vincular estos archivos de objeto resultantes en un programa ejecutable.

Dmitry Panteleichev (dimanix2006 en rambler dot ru) - Introducción al compilador GCC

Salvadera

el cuartel de adán 15 de marzo de 2014 a las 13:20

Aprendizaje de C++. ¿Qué pasa si empiezas en Linux?

¡Hervido!

En el sistema actual de educación escolar, la nitidez para el sistema operativo de Microsoft es asombrosa: con muy raras excepciones, puedes ver algo como Edubuntu o Russian ALT Linux en alguna parte, pero por lo demás es Windows. En mi opinión, ya es hora de familiarizar a los niños en las escuelas con una visión diferente de lo que debería ser la interfaz entre el hombre y el hardware, y no buscar formas comunes. Tal vez una visión comparativa-analítica de las cosas ayude a elevar el nivel extremadamente bajo de alfabetización informática entre los graduados de la escuela que ni siquiera pueden formatear un texto en Word o hacer una buena presentación en PowerPoint.

Es sinceramente sorprendente que en las escuelas se considere súper complejo e incluso místico compilar matrices bidimensionales en el mismo Pascal "e, que, por cierto, también hace mucho tiempo que debería ser reemplazado por un Python más flexible y conveniente o JavaScript Estimados maestros, ¿cuál debería ser la motivación del estudiante si su No aprendemos eslavo primero, y luego ruso y otros para reforzar las reglas de la gramática, entonces, ¿qué demonios?

Dada la profesión de moda de un programador y un cierto romance en la mente de los jóvenes, inspirados en el cine de Hollywood, las personas ingresan a las universidades y enfrentan una serie de dificultades: su cabeza comienza a expandirse dramáticamente, lo que inevitablemente conduce primero a la fatiga y luego a la decepción en su elección. El hecho permanece: si te asocias con una profesión que requiere una superación personal constante, comienza a hacerlo incluso antes de ingresar. Hay muchos materiales que lo ayudarán a estar más preparado en el proceso de estudio y le permitirán encontrar un trabajo en su especialidad para el tercer o cuarto año de estudio. ¡Mover!

En el contexto de tal razonamiento, vino a mí para hacer un pequeño tutorial sobre cómo escribir, compilar y ejecutar un programa C ++ en Linux sin herramientas especiales (IDE). Este enfoque introducirá al programador novato en el proceso de desarrollo de la forma más trivial, así como en el sistema operativo Linux, que es fundamentalmente nuevo para él. Al final de mi habrapost, escribiré una bibliografía y enlaces útiles.

Comencemos con lo que necesitamos:
-Distribución de Linux (toma Ubuntu);
-Compilador g++ instalado;
-Editor de texto normal (gedit);
-Terminal;

¡Vamos!

1. Instalación de Linux y el software necesario.
Descargue del sitio oficial ubuntu.ru la imagen de la distribución Linux Ubuntu. También me gustaría agregar que no recomiendo usar Wubi. Hacemos una instalación normal ya sea en nuestro disco duro o en una máquina virtual. Grabamos la imagen en disco usando Nero o ImgBurn. Reiniciamos y entramos en el BIOS, donde debemos establecer la prioridad de arranque desde la unidad de CD / DVD. Guardamos la configuración y salimos. Arrancamos desde el disco e instalamos el sistema operativo. (Más información estará en el siguiente enlace). Editor de texto, tenemos una terminal por defecto. Para instalar el compilador g++, abra una terminal con alt+ctrl+T y escriba: sudo apt-get install g++. Se nos pedirá que ingresemos una contraseña, ingrese, presione Entrar. Listo.
2. Crear un archivo cpp.
Abra la carpeta de inicio en el administrador de archivos de Nautilus y, en paralelo, abra la terminal alt + ctrl + t. En él escribimos el comando touch helloworld.cpp. El comando táctil creará un archivo con el nombre que desee. Ahora puede minimizar la terminal y concentrarse en Nautilus "e. Abra nuestro archivo y escriba el código más popular del mundo:

#incluir utilizando el espacio de nombres estándar; int principal()( cout<< "Hello world!"; return 0; }

Cerrar, guardar.

3. Compilación y lanzamiento.
Abre la terminal nuevamente y llama a nuestro compilador con g++ -lm -o output helloworld.cpp . g++ es nuestro propio compilador, y -lm y -o son las opciones de cambio con las que lo ejecutamos. salida: tener un archivo de salida donde se coloca el resultado de nuestra compilación, seguido del nombre de nuestro archivo cpp. Presione enter, si el programa es correcto, entonces no habrá mensajes. Ahora, para ejecutar el programa, ingresa lo siguiente en la terminal: ./output y presiona enter. La pantalla muestra el resultado "¡Hola mundo!".
¡Así que ha escrito su primer programa C++ para Linux! Los felicito y les deseo éxito en una educación versátil y de calidad. Tu competencia está en tus manos, recuerda esto.

PD Si al menos un estudiante hace lo que escribí, consideraré que mi misión está completa. ¡Mis mejores deseos!
P.S.S. Enlaces.