Uso de herramientas básicas de desarrollo del entorno Linux (uso de la herramienta de instalación de software yum, uso del editor vim y uso del compilador gcc/g++, etc.)

inserte la descripción de la imagen aquí

1. Administrador de paquetes de Linux yum

1.1 ¿Qué es un paquete de software?

Una forma común de instalar software en Linux es descargar el código fuente del programa y compilarlo para obtener un programa ejecutable, pero esto es demasiado problemático, por lo que algunas personas compilan algún software de uso común con anticipación y lo convierten en un paquete de software ( Se puede entender como un instalador en Windows) en un servidor, y el paquete de software compilado se puede obtener fácilmente a través del administrador de paquetes e instalarlo directamente. El paquete de software y el administrador de paquetes son como "Aplicación" y "Tienda de aplicaciones".
Yum (Yellow dog Updater, Modified) es un administrador de paquetes muy utilizado en Linux, principalmente en Fedora, RedHat, Centos y otras distribuciones.

En el blog que escribí antes sobre la configuración del entorno, escribí sobre cómo cambiar la fuente Ali doméstica, que se refiere a la fuente yum. Si usamos la fuente externa predeterminada, es posible que no podamos conectarnos o que la velocidad de la red sea extremadamente lenta. Sobre cambiar la fuente Puedes echar un vistazo a mi blog Historia de Linux y construcción del entorno

Primero podemos ver la fuente de yum en nuestro propio Linux e ingresar ls /etc/yum.repos.d
inserte la descripción de la imagen aquí
CentOS-Base.repo como la fuente predeterminada

1.2 Comandos comunes de yum

Comando yum listpara ver la lista de paquetes de software contenidos en todas sus fuentes
inserte la descripción de la imagen aquí
Comando yum search 软件名称para ver los paquetes de software que estamos buscando
inserte la descripción de la imagen aquí
En realidad, esto no es fácil de buscar cuando la cantidad de datos es grande, por lo que podemos reemplazarlo con yum list | grep 软件名称
inserte la descripción de la imagen aquí
Entonces podemos instalar este software , ingrese el comando yum install -y links, necesita Tenga en cuenta que para la instalación de usuarios no root, recuerde agregar sudo (como se muestra en la figura a continuación) o cambiar a usuario root. Se puede omitir la -y en el medio, y la adición es omitir algunos paquetes y permítanos confirmar durante el proceso de instalación.
inserte la descripción de la imagen aquí
Si no necesitamos este software, también podemos eliminarlo a través del comando, ingrese el comando yum remove -y links, la misma instalación de usuario no root, recuerde agregar sudo (como se muestra a continuación) o cambiar a usuario root
inserte la descripción de la imagen aquí

1.3 Paquete divertido yum


yum install -y sl
inserte la descripción de la imagen aquí
Parámetros de trenes pequeños :
-c #mostrar trenes pequeños defectuosos
-F #trenes pequeños de abajo hacia arriba

Si está interesado, puede buscar comandos yum interesantes en Internet

2. Herramientas de desarrollo Linux

Cuando usamos la plataforma Windows, la mayoría de las herramientas de desarrollo que usamos son entornos de desarrollo integrados (también conocidos como IDE)

El entorno de desarrollo integrado (entorno de desarrollo integrado, IDE para abreviar, también conocido como entorno de diseño de integración, entorno de depuración de integración) es un software de aplicación que ayuda a los desarrolladores de programas a desarrollar software. Dentro de la herramienta de desarrollo, puede ayudar a escribir texto de código fuente, compilar y los paquetes se convierten en programas usables, y algunos incluso pueden diseñar interfaces gráficas.

Un IDE generalmente incluye un editor de lenguaje de programación, herramientas de automatización de compilación y, a menudo, un depurador. Algunos IDE incluyen compiladores/intérpretes, como Microsoft Visual Studio, mientras que otros no, como Eclipse, SharpDevelop, etc. Estos IDE implementan la compilación de código llamando a compiladores de terceros. A veces, un IDE también incluye un sistema de control de versiones y herramientas para diseñar interfaces gráficas de usuario. Muchos IDE modernos que admiten la orientación a objetos también incluyen navegadores de clases, visores de objetos y diagramas de estructura de objetos. Aunque algunos IDE actualmente admiten varios lenguajes de programación (como Eclipse, NetBeans, Microsoft Visual Studio), en general, los IDE están diseñados principalmente para lenguajes de programación específicos (como Visual Basic, Spyder)

Sin embargo, en el desarrollo bajo el entorno del sistema Linux, las herramientas utilizadas no están integradas, pero las herramientas para escribir código, las herramientas de compilación y las herramientas de depuración están todas separadas. A continuación, presentaremos la primera herramienta.

2.1 El origen de la herramienta vim

inserte la descripción de la imagen aquí

Vim es un editor de texto desarrollado a partir de vi. Su finalización de código, compilación, salto de error y otras funciones de programación convenientes son particularmente ricas y son ampliamente utilizadas entre los programadores. Empatado con Emacs como el editor favorito para los usuarios de sistemas similares a Unix.

La primera versión de Vim fue lanzada por Bram Miller en 1991. La abreviatura inicial era Vi IMitation.Con el aumento continuo de funciones, el nombre oficial se cambió a Vi IMproved. Ahora es software libre lanzado bajo el código fuente abierto.

Cuando Bram Miller compró su computadora Amiga a finales de los 80, Amiga no tenía vi, su editor favorito. Bram desarrolló la versión 1.0 de Vim, comenzando con Stevie, un clon vi de código abierto. El objetivo original era replicar por completo la funcionalidad de vi, y Vim en ese momento era la abreviatura de Vi IMitation (simulación). En 1991, la versión 1.14 de Vim se incluyó en "Fred Fish Disk #591", una colección de software libre para Amiga. La versión 1.22 de Vim se trasladó a UNIX y MS-DOS en 1992. Desde entonces, el nombre completo de Vim se ha convertido en Vi IMproved (mejorado).

Desde entonces, Vim ha agregado innumerables funciones nuevas. Como primer hito, la versión 3.0 de 1994 añadió el modo de edición multiventana (ventana dividida), que permite editar varios archivos a la vez en un mismo terminal. Vim 4.0, lanzado en 1996, fue el primero en utilizar una GUI (interfaz gráfica de usuario). En 1998, la versión 5.0 de Vim agregó la función de resaltado (resaltado de sintaxis). La versión Vim 6.0 en 2001 agregó funciones como plegado de código, complementos, compatibilidad con varios idiomas y ventanas divididas verticales. La versión Vim 7.0 lanzada en mayo de 2006 agregó nuevas funciones, como revisión ortográfica, finalización sensible al contexto y edición de páginas con pestañas. Vim 7.2, lanzado en agosto de 2008, combinó todas las correcciones desde Vim 7.1 y agregó soporte para números de coma flotante en scripts.

2.2 modo vim

Vim derivado de vi tiene múltiples modos, y este diseño único puede confundir fácilmente a los principiantes. Casi todos los editores tienen dos modos de insertar y ejecutar comandos, y la mayoría de los editores usan un método completamente diferente al de Vim: lista de comandos (con el mouse o el teclado), combinaciones de teclas (generalmente a través de la tecla de control (CTRL) y la tecla alt (ALT)) o entrada de ratón. Vim, como vi, cambia entre estos modos solo con el teclado. Esto le permite a Vim evitar operaciones de menú o mouse, y minimizar la operación de combinaciones de teclas. Puede mejorar en gran medida la velocidad y la eficiencia para el personal de entrada de texto o los programadores.

Vim tiene 6 modos base y 5 modos derivados

①Modo básico

Modo normal
En el modo normal, se utilizan los comandos del editor, como mover el cursor, borrar texto, etc. Este es también el modo predeterminado después de que se inicie Vim. Esto es exactamente lo contrario de lo que muchos usuarios nuevos esperan hacer (el modo predeterminado para la mayoría de los editores es el modo de inserción).

Las poderosas capacidades de edición de Vim provienen de sus comandos de modo normal. Los comandos de modo normal a menudo requieren una terminación de operador. Por ejemplo, el comando de modo normal "dd" elimina la línea actual, pero la primera "d" puede ser seguida por otro comando de movimiento para reemplazar la segunda "d". Por ejemplo, la tecla "j" para pasar a la siguiente línea Puede eliminar la línea actual y la línea siguiente. Además, también puede especificar el número de repeticiones de comandos, "2dd" (repita "dd" dos veces), y el efecto de "dj" es el mismo. Los usuarios han aprendido una variedad de comandos para moverse/saltar entre textos y otros comandos de edición de modo comunes, y si se pueden usar en combinación de manera flexible, pueden editar texto de manera más eficiente que aquellos sin editores de modo.

En el modo normal, hay muchas formas de ingresar al modo de inserción. La forma más común es presionar la tecla "a" (añadir/añadir) o la tecla "i" (insertar/insertar).

Modo Insertar
En este modo, la mayoría de las pulsaciones de teclas insertan texto en el búfer de texto. La mayoría de los nuevos usuarios esperan que este modo permanezca en el editor de texto mientras editan.

En el modo de inserción, puede presionar la tecla ESC para volver al modo normal.

Modo Visual
Este modo es similar al modo normal. Pero el comando mover amplía el área de texto resaltada. Un área resaltada puede ser un carácter, una línea o un bloque de texto. Al ejecutar un comando sin movimiento, el comando se ejecutará en esta área resaltada. Los "objetos de texto" de Vim también se pueden usar en este modo, así como los comandos de movimiento.

Modo de selección
Este modo es similar al comportamiento de los editores no modales (como lo hacen los controles de texto estándar de Windows). En este modo, puede usar el mouse o las teclas del cursor para resaltar el texto seleccionado, pero si ingresa cualquier carácter, Vim reemplazará el bloque de texto resaltado seleccionado con este carácter y automáticamente ingresará al modo de inserción.

Modo de línea de comandos
En el modo de línea de comandos puede ingresar texto que será interpretado y ejecutado. Los ejemplos incluyen la ejecución de comandos (tecla ":"), búsquedas (teclas "/" y "?") o comandos de filtrado (tecla "!"). Después de ejecutar el comando, Vim vuelve al modo en el que estaba antes del modo de línea de comandos, generalmente el modo normal.

Modo Ex
Esto es similar al modo de línea de comando, antes de usar el comando ":visual" para salir del modo Ex, puede ejecutar varios comandos a la vez

②Modo derivado

Modo de espera del operador
Este modo derivado se refiere al modo normal, después de ejecutar un comando de operación, Vim espera una "acción" para completar el comando. Vim también admite el uso de "objetos de texto" como acciones en el modo de espera del operador, incluido "aw" una palabra (una palabra), "as" una oración (una oración), "ap" un párrafo (un párrafo) y así en.

Por ejemplo, "d2as" elimina la oración actual y la siguiente en modo normal. "apU" pone en mayúsculas todas las letras del párrafo actual en modo visual.

Insertar modo normal
Se ingresa a este modo cuando se presiona la tecla ctrl-o en el modo de inserción. Ingrese temporalmente al modo normal en este momento, después de ejecutar un comando, Vim vuelve al modo de inserción

Insertar modo visual
Este modo se inicia al presionar la tecla ctrl-o en el modo insertar y comenzar una selección visual. Vim vuelve al modo de inserción cuando se cancela la selección del área visible.

Modo de selección de inserción
Por lo general, se ingresa a este modo arrastrando el mouse o presionando las teclas de desplazamiento en el modo de inserción. Cuando se cancela el área de selección, Vim vuelve al modo de inserción.

Modo de reemplazo
Este es un modo de inserción especial, en el que puede realizar las mismas operaciones que en el modo de inserción, pero cada carácter ingresado sobrescribirá los caracteres existentes en el búfer de texto. Pulse la tecla "R" para entrar en modo normal.

Como principiante, debemos comprender y dominar los tres modos de vim (de hecho, hay muchos modos, puede dominar estos tres en este momento), que son el modo de comando, el modo de inserción y el modo de última línea), las funciones de cada modo se distinguen de la siguiente manera:

Modo Normal/Normal/Comando (modo Normal)
controla el movimiento del cursor de la pantalla, elimina caracteres, palabras o líneas, mueve y copia una sección y entra en el modo Insertar, o va al modo de última línea

Modo Insertar (Modo Insertar)
Solo en el modo Insertar se puede ingresar texto, presione la tecla "ESC" para regresar al modo de línea de comando.
Este modo es el modo de edición más frecuente que usaremos más adelante .

El modo de última línea (modo de última línea)
guarda o sale del archivo, y también puede realizar el reemplazo de archivos, buscar cadenas, enumerar números de línea y otras operaciones. En el modo de comando, presione shift+: para ingresar a este modo
. Para ver todos sus modos: abra vim, ingrese el modo de línea inferior directamente:help vim-modes

2.3 Funcionamiento básico de vim

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Ingrese vim, ingrese vim y el nombre del archivo en el símbolo de aviso del sistema, y ​​luego ingrese a la pantalla de edición de pantalla completa de vim vim test.c
o ingrese directamente vim
inserte la descripción de la imagen aquí
.mode] para poder ingresar texto.

[Modo normal] Cambiar a [Modo de inserción]
Ingresar a
Ingresar i
Ingresar o
inserte la descripción de la imagen aquí
[Modo de inserción] Cambiar a [Modo normal]
Actualmente en [Modo de inserción], solo puede ingresar texto todo el tiempo. palabra incorrecta, desea usar la tecla del cursor para retroceder y eliminar el carácter, puede presionar la tecla "ESC" para ingresar al [modo normal] y luego eliminar el carácter. Por supuesto, también se puede eliminar directamente.
inserte la descripción de la imagen aquí
[Modo normal] Cambie a [Modo de última línea]
"shift +;", de hecho, ingrese ":"
inserte la descripción de la imagen aquí
para salir de vim y guardar el archivo. En [Modo normal], presione la tecla de dos puntos ":" para ingresar "Última línea mode", Por ejemplo:
: w (guardar el archivo actual)
: wq (ingresar "wq", guardar y salir de vim)
: q! (ingresar q!, forzar la salida de vim sin guardar)

2.4 conjunto de comandos de modo normal vim

Modo de inserción
Presione "i" para cambiar al modo de inserción "modo de inserción". Presione "i" para ingresar al modo de inserción para comenzar a ingresar archivos desde la posición actual del cursor; presione "a" para ingresar al modo de inserción
para ingresar al siguiente archivo desde la posición actual del cursor Ingrese el texto en la posición;
presione "o" para ingresar al modo de inserción, se inserta una nueva línea y el texto se ingresa desde el principio de la línea.
Cambiar del modo de inserción al modo de comando
Pulse la tecla "ESC".
Mover el cursor
Vim puede usar directamente el cursor en el teclado para moverse hacia arriba, abajo, izquierda y derecha, pero vim normal usa letras minúsculas en inglés "h", "j", "k" y "l" para controlar el cursor izquierda, abajo, arriba y derecha
respectivamente Mueva una cuadrícula
Aquí debemos explicar por qué se usan estas 4 teclas, porque cuando se diseñó originalmente el teclado, no había teclas de flecha Presione
inserte la descripción de la imagen aquí
"G": Muévase al final del artículo, es decir, shift+g
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Presione "$": Muévase a la posición del cursor El "final de la línea" de la línea, es decir, shift+4
y presione "^": muévase al "comienzo de la línea" de la línea línea donde se encuentra el cursor, es decir, shift+6 y
presiona "w": el cursor salta al principio de la siguiente palabra
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Presione "e": el cursor salta al final de la siguiente palabra
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Presione "b": el cursor vuelve al principio de la palabra anterior
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Presione "#l": mueva el cursor a la posición #th de la línea, como: 5l, 56l
Presione [gg]: ingrese el comienzo del texto
Presione [shift+g]: ingrese el final del texto
Presione " ctrl" + "b": Ir a la pantalla "Atrás" para mover una página
Presione "ctrl" + "f": la pantalla se mueve una página al "frente"
Presione "ctrl" + "u": la pantalla se mueve la mitad una página "atrás" Presione
"ctrl" + "d": la pantalla Mueva media página al "frente" y
borre el texto
"x": cada vez que presione, borre un carácter
"#x" en la posición del cursor: por ejemplo, "6x" significa eliminar "detrás (incluido usted mismo)" en la posición del cursor 6 caracteres
"X": X mayúscula, cada vez que presione se eliminará un carácter "#X" "antes" de la posición del cursor : por ejemplo, "20X " significa borrar 20 caracteres "dd" "
antes" de la posición del cursor "#dd": Borrar #línea de la línea donde se encuentra el cursor Copiar "yw": Copiar los caracteres del cursor posición al final de la palabra en el búfer. "#yw": copia # caracteres al búfer "yy": copia la línea donde se encuentra el cursor al búfer. "#yy": Por ejemplo, "6yy" significa copiar 6 líneas de texto "contando hacia atrás" desde la línea donde se encuentra el cursor. "p": pega los caracteres en el búfer en la posición del cursor. Nota: Todos los comandos de copia relacionados con "y" deben cooperar con "p" para completar las funciones de copiar y pegar. Reemplazar "r": reemplaza el carácter donde se encuentra el cursor. "R": Reemplazar el carácter donde está el cursor, hasta que se presione la tecla "ESC". deshacer la última acción












"u": si ejecuta un comando por error, puede presionar inmediatamente "u" para volver a la operación anterior. Presiona "u" varias veces para realizar varias respuestas.
"ctrl + r": Deshacer el
cambio
de rehacer "cw": Cambiar la palabra donde está el cursor al final de la palabra
"c#w": Por ejemplo, "c3w" significa cambiar 3 caracteres
y saltar a la línea especificada
" ctrl"+" g" enumera el número de línea de la línea donde se encuentra el cursor.
"#G": Por ejemplo, "15G", significa mover el cursor al principio de la línea 15 del artículo.

Conjunto de comandos de modo de última línea 2.5 vim

Antes de usar el modo de línea final, recuerde presionar la tecla "ESC" para confirmar que ya está en el modo normal y luego presione los dos puntos ":" para ingresar al modo de línea final.
Listar números de línea
"set nu": después de escribir "set nu", los números de línea aparecerán antes de cada línea en el archivo.
inserte la descripción de la imagen aquí

Saltar a una línea
"#" en el archivo: "#" significa un número, ingrese un número después de los dos puntos y luego presione la tecla Intro para saltar a la línea, como ingresar el número 15, y luego presione Intro, Pasará a la línea 15 del artículo.
Caracteres de búsqueda
"/palabra clave": presione primero la tecla "/" y luego ingrese el carácter que desea encontrar, si la palabra clave que encuentra por primera vez no es lo que desea, puede seguir presionando "n" para encontrar lo que busca
. falta de palabras clave.
"? Palabra clave": Presione primero la tecla "?" y luego ingrese el carácter que desea encontrar. Si la palabra clave que encuentra por primera vez no es la que desea, puede seguir presionando "n" para encontrar la tecla que busca. quiere hasta la palabra.
Pregunta: / y ? Encuentra la diferencia entre have y ? Experimente con la operación y
guarde el archivo
"w": ingrese la letra "w" entre los dos puntos para guardar el archivo y deje
vim
"q": presione "q" para salir. Si no puede salir de vim, puede seguir "q" con "!" Fuerza para salir de vim.
"wq": generalmente se recomienda usarlo junto con "w" al salir, para que el archivo se pueda guardar al salir.

2.6 Configuración sencilla de vim

La ubicación del archivo de configuración
En el directorio /etc/, hay un archivo llamado vimrc, que es un archivo de configuración de vim público en el sistema y es válido para todos los usuarios. Y en el directorio de inicio de cada usuario, puede crear su propio archivo de configuración privado, denominado: ".vimrc". Por ejemplo, en el directorio /root, generalmente hay un archivo .vimrc y, si no existe, se creará.
Cambie de usuario para convertirse en usted mismo y ejecute su, ingrese a su directorio de trabajo principal, ejecute cd ~
abra el archivo .vimrc en su propio directorio y ejecute vim. Las opciones de configuración comunes de Vimrc
se usan para probar
. Establecer resaltado de sintaxis: sintaxis en el
número de línea de visualización : set nu
Establezca el número de espacios para la sangría en 4: set shiftwidth=4
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Si está interesado, también puede encontrar otras configuraciones de complementos en Internet. La siguiente imagen es la
inserte la descripción de la imagen aquíreferencia de vim establecida por el autor
. Vim from entry a la competencia

3. Compilador de Linux - uso de gcc/g++

Antes de introducir y usar, verifiquemos las versiones de gcc y g ++.
Ingrese gcc -v
inserte la descripción de la imagen aquí
, puede ver que mi sistema aquí es la versión 4.8.5, que es suficiente para principiantes. Por supuesto, también puede actualizarse si es necesario. Luego
ingrese g++ -v
inserte la descripción de la imagen aquí
aquí podemos Encontrará la siguiente situación,
inserte la descripción de la imagen aquí
lo que significa que no hemos instalado g ++, podemos instalar lo siguiente para ingresar
y sudo yum install -y gcc-c++luego ingresar la contraseña, la instalación es exitosa cuando aparece la siguiente interfaz
inserte la descripción de la imagen aquí
Luego instale la biblioteca estática cpp e ingrese
el comandosudo yum install -y libstdc++-static
inserte la descripción de la imagen aquí

3.1 Conocimiento previo

  1. Preprocesamiento (reemplazo de macros)
  2. compilar (generar ensamblaje)
  3. Asamblea (genera código legible por máquina)
  4. enlazar (generar archivos ejecutables o de biblioteca)

3.2 Cómo se hace gcc

formatee el archivo gcc [opciones] para compilar [opciones] [archivo objeto]

Preprocesamiento (sustitución de macros)
Las funciones de preprocesamiento incluyen principalmente la definición de macros, la inclusión de archivos, la compilación condicional y la eliminación de comentarios.
Las directivas de preprocesamiento son líneas de código que comienzan con el signo #.
Ejemplo: gcc -E test.c -o test.i
opción "-E", la función de esta opción es permitir que gcc detenga el proceso de compilación después de que se complete el preprocesamiento.
La opción "-o" hace referencia al archivo objeto y el archivo ".i" es el programa C original que se ha preprocesado.
inserte la descripción de la imagen aquí
archivo prueba.c

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
Podemos ver que hay un total de 851 líneas después de la compilación, incluida la expansión y la copia de archivos de encabezado, la sustitución de definiciones de macro y la salida directa de la compilación condicional.

Compilación (ensamblado generador)
En esta etapa, gcc primero verifica la estandarización del código, si hay errores gramaticales, etc., para determinar el trabajo real a realizar en el código, y luego de verificar que es correcto, gcc traduce
el código en lenguaje ensamblador.
Los usuarios pueden usar la opción "-S" para ver, esta opción solo compila pero no ensambla y genera código ensamblador.
Ejemplo:gcc -S test.i -o test.s
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Ensamblaje (generación de código reconocible por la máquina)
La etapa de ensamblaje consiste en convertir el archivo ".s" generado en la etapa de compilación en un archivo de objeto. Los
lectores pueden usar la opción "-c" aquí para ver que el código de ensamblaje se ha convertido en un Ejemplo de código de objeto binario ".o"
: gcc -c test.s -o test.o
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
visor binariood test.o
inserte la descripción de la imagen aquí

Después de compilar correctamente la vinculación (generación de archivos ejecutables o archivos de biblioteca)
, entra en la fase de vinculación.
Ejemplo:gcc test.o -o test
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Aquí está involucrado un concepto importante: la biblioteca de funciones
En nuestro programa C, la implementación de la función "printf" no está definida, y solo está incluida la declaración de esta función en "stdio.h" en la precompilación, pero no hay definición La implementación de la función, entonces, ¿dónde está implementada la función "printf"? La
respuesta final es: el sistema implementa estas funciones en el archivo de biblioteca llamado libc.so.6. Cuando no hay una designación especial, gcc buscará en el valor predeterminado del sistema ruta de búsqueda "/usr/lib", es decir, enlace a la función de biblioteca libc.so.6, para que se pueda realizar la función "printf", y esta es la función del enlace

La biblioteca de funciones generalmente se divide en dos tipos: biblioteca estática y biblioteca dinámica.Biblioteca
estática significa que al compilar y vincular, todo el código del archivo de la biblioteca se agrega al archivo ejecutable, por lo que el archivo generado es relativamente grande, pero la biblioteca ya no es necesario en tiempo de ejecución. Su sufijo es generalmente ".a". Por el contrario, el código del archivo de la biblioteca no se agrega al archivo ejecutable al compilar y vincular, pero la biblioteca se carga mediante el archivo de enlace en tiempo de ejecución cuando se ejecuta el programa, lo que puede ahorrar gastos generales del sistema. El sufijo general de la biblioteca dinámica es ".so", como se mencionó anteriormente, libc.so.6 es la biblioteca dinámica. gcc usa bibliotecas dinámicas de forma predeterminada al compilar. Una vez que se completa el enlace, gcc puede generar el archivo ejecutable, como se muestra a continuación.
gcc hello.o –o hello
Primero revisemos la biblioteca dependiente de nuestro gcc.
Primero, ingrese ls /lib64/libc.*
lo siguiente.
inserte la descripción de la imagen aquí
Si es la siguiente situación, no entre en pánico.
inserte la descripción de la imagen aquí
En este caso, hay una falta de biblioteca estática. Podemos instalarla y
ingrese el siguiente comando sudo yum install glibc-static inserte la descripción de la imagen aquí
Después de completar la instalación, puede verificarlo nuevamente

El programa binario generado por gcc por defecto está vinculado dinámicamente, lo que puede verificarse con el comando de archivo.
inserte la descripción de la imagen aquí
Podemos ver que el archivo de prueba procesado aquí depende de la biblioteca dinámica de c
inserte la descripción de la imagen aquí
, entonces, ¿cómo usamos la vinculación estática?
Ingresamos el siguiente código gcc test.c -o tests -static
inserte la descripción de la imagen aquí
y podemos ver que el archivo vinculado estáticamente es mucho más grande que el archivo vinculado dinámicamente, analizamos sus diferencias de la siguiente manera

  1. La vinculación dinámica es para completar la dirección de la función que necesitamos en mi programa ejecutable y establecer una asociación, lo que puede ahorrar recursos
  2. La vinculación estática consiste en copiar toda la biblioteca que necesita en nuestro programa ejecutable, lo que consume una gran cantidad de recursos

Resumen de las opciones de gcc
-E solo activa el preprocesamiento, esto no genera un archivo, debe redirigirlo a un archivo de salida
-S compilar en lenguaje ensamblador sin ensamblar y vincular
-c compilar en código objeto
-o archivo de salida en archivo
- estático Esta opción aplica enlaces estáticos a los archivos generados
-g Genera información de depuración. El depurador GNU puede usar esta información.
-shared Esta opción intentará utilizar la biblioteca dinámica tanto como sea posible, por lo que el archivo generado es relativamente pequeño, pero el sistema necesita la biblioteca dinámica
-O0
-O1
-O2
-O3 Los 4 niveles de opciones de optimización del compilador, -O0 significa que no hay optimización, -O1 es el valor predeterminado, -O3 es el nivel de optimización más alto
-w no genera ningún mensaje de advertencia.
-Wall Generar todos los mensajes de advertencia.

4. Uso del depurador de Linux -gdb

4.1 Antecedentes

Hay dos formas de liberar el programa, el modo de depuración y el modo de liberación
. El programa binario de Linux gcc/g++ es el modo de liberación predeterminado
. Para usar la depuración de gdb, debe agregar la opción -g al generar el programa binario desde el código fuente.

4.2 Primeros pasos

gdb binFile Salir: ctrl + d o salir Comando de depuración:
list/l Número de línea: muestra el código fuente de binFile, luego baja a la última posición y enumera 10 líneas cada vez.
list/l nombre de función: muestra el código fuente de una función.
r o ejecutar: Ejecutar el programa.
n o siguiente: ejecución única.
s o paso: Ingrese la llamada de función
break(b) Número de línea: Establezca un punto de interrupción en un determinado
salto de línea Nombre de la función: Establezca un punto de interrupción al comienzo de una determinada función
info break: Vea la información del punto de interrupción.
terminar: Ejecutar hasta que regrese la función actual, y luego retirarse y esperar el comando
imprimir§: Imprimir el valor de la expresión, puede modificar el valor de la variable o llamar a la función
p variable a través de la expresión: imprimir el valor de La variable.
establecer var: modificar el valor de la variable
continuar (o c): ejecutar el programa continuamente desde la posición actual en lugar de ejecutar un solo paso
(o r): ejecutar el programa continuamente desde el principio en lugar de un solo paso
eliminar puntos de interrupción: eliminar todos los puntos de interrupción
eliminar puntos de interrupción n: eliminar el punto de interrupción cuyo número de serie es n
desactivar puntos de interrupción: deshabilitar el punto de interrupción
habilitar puntos de interrupción: habilitar la
información del punto de interrupción (o i) puntos de interrupción: ver qué puntos de interrupción están configurados actualmente
mostrar nombre de variable: rastrear y ver una variable, y mostrar su nombre cada vez que se detiene value
undisplay: deshacer el seguimiento de las variables que se establecieron previamente
hasta el número de línea X: saltar a la línea X
breaktrace (o bt): vea las llamadas a funciones y los parámetros en todos los niveles
info (i) locales: vea el valor de las variables locales en el marco de pila actual
quit: salga de gdb

4.3 Comprensión

Primero creamos un archivo test.c, y luego lo compilamos, el código es el siguiente:

inserte la descripción de la imagen aquí
Pero lo que debemos saber es que en el entorno gcc o g++, el archivo ejecutable de liberación de enlace dinámico se genera por defecto, es decir, no se puede depurar, podemos agregar -g al compilar, es decir, la
forma en gcc test.c -o testdebug -g
que puede pasar readelf -S 文件名Compruebe la diferencia entre los dos archivos ejecutables.
El archivo ejecutable de prueba generado de forma predeterminada. readelf -S test
inserte la descripción de la imagen aquí
El archivo de depuración generado. readelf -S testdebug
inserte la descripción de la imagen aquí
Puede ver que el segundo archivo contiene información de depuración, pero el primero no, por lo que el segundo archivo se puede depurar con gdb

El primer paso es ingresar el comando gdb testdebugpara iniciar la depuración.
inserte la descripción de la imagen aquí
Cabe señalar que gbd registrará el último comando. Si no hay cambios en el comando, puede presionar directamente Enter.
Por ejemplo, primero mostraremos todos los códigos y imprimir la l 0
inserte la descripción de la imagen aquí
entrada desde el principio Ingresar comando b 行号punto de interrupción
inserte la descripción de la imagen aquí
Ingresar comando info bpara ver punto de interrupción
inserte la descripción de la imagen aquí
Ingresar comando d 断点编号Eliminar el punto de interrupción, recuerde que no es el número de línea sino el número numérico en el punto de interrupción
inserte la descripción de la imagen aquí
Luego ingresamos el comando rpara comenzar a depurar Si el punto de interrupción es no se establece, la operación terminará directamente Luego
inserte la descripción de la imagen aquí
establecemos un punto de interrupción antes de ejecutar la función, y el comando de entrada ses paso a paso Declaración, la entrada nes proceso por proceso
inserte la descripción de la imagen aquí
Comando de entrada btpara ver la pila de llamadas actual
inserte la descripción de la imagen aquí
Comando de entrada p 变量名para imprimir contenido variable o comando p &变量名para ver la dirección
inserte la descripción de la imagen aquí
Si desea mostrar siempre los comandos de entrada display 变量名, cancele la visualización constante de los comandos de entrada undisplay
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Ingrese los comandos finishpara ejecutar la función actual directamente y luego deténgala
inserte la descripción de la imagen aquí
O también puede ingresar comandos until 行号Saltar directamente a una línea determinada
inserte la descripción de la imagen aquí
Para otro ejemplo, vamos alcance algunos puntos de interrupción más a continuación y ejecute el comando para cejecutar directamente al siguiente punto de interrupción y detenerse.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Ejecute el comando disable/enable 断点编号para cerrar/abrir el punto de interrupción.
inserte la descripción de la imagen aquí
Finalmente, ejecute el comando quitpara salir de la herramienta de depuración de gdb.
inserte la descripción de la imagen aquí
Todos los comandos básicos de depuración de gdb son estos La!

5. Herramienta de compilación de automatización de proyectos de Linux - make/Makefile

5.1 Antecedentes

Si puede escribir un archivo MAKE, de un lado muestra si una persona tiene la capacidad de completar proyectos a gran escala

Los archivos fuente de un proyecto no se cuentan y se colocan en varios directorios según el tipo, la función y el módulo. El archivo MAKE define una serie de reglas para especificar qué archivos se deben compilar primero y qué archivos se deben compilar después. , y qué archivos deben volver a compilarse Compilar e incluso realizar operaciones funcionales más complejas

El beneficio que trae makefile es - "compilación automática". Una vez escrito, solo se necesita un comando make y todo el proyecto se compila automáticamente, lo que mejora en gran medida la eficiencia del desarrollo de software.

make es una herramienta de comando que explica las instrucciones en el archivo MAKE.En términos generales, la mayoría de los IDE tienen este comando, como: make en Delphi, nmake en Visual C++, make en GNU bajo Linux. Se puede ver que los makefiles se han convertido en un método de compilación en ingeniería.

make es un comando, makefile es un archivo y los dos se usan juntos para completar la construcción automática del proyecto.

5.2 Comprensión

En primer lugar, primero creamos un archivo Makefile en el mismo directorio que el archivo c (la primera letra puede ser mayúscula o minúscula)
entrada touch Makefile
inserte la descripción de la imagen aquí
Abrimos el archivo Makefile, ingresamos la siguiente información, guardamos y salimos

  1 tests:test.c
  2   gcc test.c -o tests 
  3 .PHONY:clean
  4 clean:
  5   rm -f tests

inserte la descripción de la imagen aquí

La primera línea de prueba en este código es el comando Makefile definido por nosotros mismos, apuntando al archivo test.c, que es una relación de dependencia, solo cuando se ejecuta la instrucción correspondiente, se ejecutará el método dependiente correspondiente. la tercera línea son definiciones de pseudoobjetivo que permiten que el comando de limpieza se ejecute repetidamente.
Veamos como usar estos dos comandos del makefile,
si ingresamos directamente makeel primer comando se ejecutará por defecto,
inserte la descripción de la imagen aquí
por supuesto también podemos usarmake tests
inserte la descripción de la imagen aquí

Ejecutemos el segundo comando, make clean
inserte la descripción de la imagen aquí
lo que debemos prestar atención aquí es que si el primer comando se usa repetidamente, aparecerá la siguiente situación,
inserte la descripción de la imagen aquí
esto se debe a que el tiempo de modificación de nuestro archivo de pruebas es posterior al archivo test.c, por lo que el valor predeterminado es el archivo de pruebas No es necesario regenerarlo.
inserte la descripción de la imagen aquí
Si modificamos el archivo test.c y llamamos al primer comando, se puede volver a llamar. Puede
inserte la descripción de la imagen aquí
ver que la última hora de modificación del archivo test.c es posterior a las pruebas archivo En este momento, llamamos al comando make nuevamente
inserte la descripción de la imagen aquí

5.3 Código de ejemplo

Primero, creamos tres archivos, de la siguiente manera:
test.h

  1 #pragma once 
  2 #include<stdio.h>
  3 
  4 extern void show(); 

prueba.c

  1 #include"test.h"
  2 void show()
  3 {
    
    
  4   printf("hello linux!\n");                                                                                                                                                                                                      
  5 }   

código.c

  1 #include"test.h"
  2 
  3 int main()
  4 {
    
    
  5   show();                                                                                                                                                                                                                        
  6   return 0;                                                                                                            
  7 }  

Modifiquemos el Makefile nuevamente, de la siguiente manera:

  1 test:test.o code.o
  2   gcc -o tests test.o code.o
  3 test.o:test.c
  4   gcc -c test.c -o test.o
  5 code.o:code.c
  6   gcc -c code.c -o code.o
  7 
  8 .PHONY:clean
  9 clean:
 10   rm -f *.o tests  

Guardar y salir.Ingresamos
el comando make
inserte la descripción de la imagen aquí
para ejecutar el comando.El make clean
inserte la descripción de la imagen aquí
comando de prueba inicial corresponde a dos archivos .o, pero no hay archivos en el directorio, por lo que seguirá buscando dependencias y ejecutará métodos dependientes.

5.4 Principio

Cómo funciona make, de forma predeterminada, es decir, solo ingresamos el comando make. Entonces,

  1. make buscará un archivo llamado "Makefile" o "makefile" en el directorio actual.
  2. Si lo encuentra, encontrará el primer archivo de destino (objetivo) en el archivo En el ejemplo anterior, encontrará el archivo de "pruebas" y utilizará este archivo como el archivo de destino final.
  3. Si el archivo de pruebas no existe, o el tiempo de modificación del archivo de los archivos test.o y code.o de los que dependen las pruebas es más nuevo que el archivo de pruebas (puede usar tocar para probar), entonces ejecutará los comandos definidos más tarde Para generar el archivo de pruebas.
  4. Si los archivos test.o y code.o de los que dependen las pruebas no existen, make buscará las dependencias de los archivos objetivo test.o y code.o en el archivo actual y, si las encuentra, generará test.o según a esa regla y al archivo code.o. (Esto es un poco como un proceso de pila)
  5. Por supuesto, su archivo C y su archivo H existen, por lo que make generará archivos test.o y code.o, y luego usará los archivos test.o y code.o para declarar la última tarea de make, que es ejecutar las pruebas de archivos. .
  6. Esta es la dependencia de todo make, y make encontrará las dependencias de los archivos capa por capa hasta que finalmente se compile el primer archivo de destino.
  7. En el proceso de búsqueda, si hay un error, como que no se puede encontrar el último archivo dependiente, make saldrá directamente e informará un error, y make ignorará el error del comando definido o la falla de compilación.
  8. make solo se preocupa por las dependencias de los archivos, es decir, si los archivos después de los dos puntos aún no están allí después de encontrar las dependencias, entonces lo siento, no trabajaré.

5.5 Proyecto de limpieza

  1. Los proyectos necesitan ser limpiados
  2. Al igual que limpiar, si no está asociado directa o indirectamente con el primer archivo de destino, los comandos definidos detrás de él no se ejecutarán automáticamente, pero podemos mostrar la ejecución. Es decir, el comando - "hacer limpio" para borrar todos los archivos de destino para volver a compilarlos.
  3. Pero generalmente establecemos el archivo de destino limpio como un pseudo-objetivo y lo modificamos con .PHONY La característica del pseudo-objetivo es que siempre se ejecuta.
  4. Podemos declarar nuestro archivo de destino de pruebas como un pseudo-objetivo y probarlo.

5.6 El primer programa pequeño en Linux - barra de progreso

Primero creamos un Makefile y lo editamos y guardamos

  1 proc:proc.c
  2   gcc -o proc proc.c
  3 .PHONY:clean
  4   rm -f proc  

Crear archivo proc.c

#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{
    
    
 	int i = 0;
 	char bar[102];
 	memset(bar, 0 ,sizeof(bar));
 	const char *lable="|/-\\";
 	while(i <= 100 ){
    
    
 		printf("[%-100s][%d%%][%c]\r", bar, i, lable[i%4]);
 		fflush(stdout);
 		bar[i++] = '#';
 		usleep(10000);
	}
 	printf("\n");
 	return 0;
}

Guardar y ejecutar make
inserte la descripción de la imagen aquí
para ejecutar proc
inserte la descripción de la imagen aquí

6. El uso de git en Linux

Primero, ingresamos en la línea de comando git -vpara verificar si git está instalado.
inserte la descripción de la imagen aquí
Si no está instalado, ejecútelo primero. sudo yum install -y git
Debido a que el autor usa el código administrado de GitHub, si es gitee, el método es similar.
Primero, primero creamos un proyecto warehouse para probar que
inserte la descripción de la imagen aquí
estas dos opciones se utilizan para construir New project warehouse
inserte la descripción de la imagen aquí
A continuación, copiamos el enlace local del almacén
inserte la descripción de la imagen aquí
A continuación, volvemos a Linux y realizamos el primer paso git clone 刚刚复制的仓库链接
inserte la descripción de la imagen aquí
A continuación, visitamos el directorio con el mismo nombre
inserte la descripción de la imagen aquí
Ahora podemos cargar nuestro propio código, el primer paso es subir el código al local
git add test1.c
y luego escribir el registro de envío
git commit -m "这是一个测试代码"

inserte la descripción de la imagen aquí
Luego presione para cargar, la entrada git push
inserte la descripción de la imagen aquí
debe tener en cuenta que durante el proceso de inserción, debe ingresar el nombre de usuario y la contraseña, pero ahora GitHub no admite la inserción de contraseña, por lo que debemos crear un token, use el token en lugar del contraseña para empujar con éxito (el usuario getee no necesita)


inserte la descripción de la imagen aquí
Deslice hacia abajo para encontrar la configuración del token
inserte la descripción de la imagen aquí
porque lo creé antes, por lo que puede ser un poco diferente. Debe haber solo un botón si no lo he creado. Puede ser

directamente la siguiente página
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
. Recuerde copiarlo y ponerlo. en el Bloc de notas u otros lugares donde pueda grabarlo. , la próxima vez que ingrese, no podrá
inserte la descripción de la imagen aquí
verlo. Puede usar este token directamente para la próxima carga.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Hay otra situación. Si cambiamos el contenido del almacén en GitHub en otros dispositivos, podemos encontrar lo siguiente cuando presionamos directamente El
inserte la descripción de la imagen aquí
almacén de GitHub tiene otro archivo, pero mi almacén local no. En este momento, creamos un nuevo archivo para cargar y ver qué sucede. Podemos ver que
inserte la descripción de la imagen aquí
nuestra carga falló. Esto se debe a que hay una discrepancia entre el almacén local y la plataforma. En el caso de una coincidencia, es decir, se ha producido un conflicto. En este momento, no tenemos cerebro y luego lo
git pull
inserte la descripción de la imagen aquí
subimos
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
. podemos editar y modificar el archivo .gitignore por nosotros mismos. El objetivo principal es filtrar los archivos innecesarios cuando se cargan en forma de un archivo de directorio
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
. Agregue dos datos con los sufijos .x y .X. A continuación, creamos un directorio que contiene algunos archivos.
inserte la descripción de la imagen aquí
Podemos ver que cuando se ejecuta el comando de confirmación, los archivos .x y .X se han ignorado localmente.
inserte la descripción de la imagen aquí
Miremos de nuevo el almacén de GitHub. no cargado
inserte la descripción de la imagen aquí

epílogo

Los amigos interesados ​​​​pueden prestar atención al autor, si cree que el contenido es bueno, haga un enlace triple con un clic, ¡cangrejo cangrejo! ! !
¡El artículo de 22.000 palabras sobre Linux me llevó mucho tiempo y energía! ! !
No es fácil de hacer, por favor señale si hay alguna inexactitud
Gracias por su visita, ver UU es la motivación para perseverar.
Con el catalizador del tiempo, ¡seamos mejores personas los unos de los otros! !
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/kingxzq/article/details/131607570
Recomendado
Clasificación