El uso de Vim, compilación de gcc, la generación y uso de bibliotecas estáticas y bibliotecas compartidas

El uso de vim, compilación gcc, la generación y uso de bibliotecas estáticas y bibliotecas compartidas

# Objetivos de aprendizaje:

  1. Dominar el uso de comandos relacionados en el modo de comando vim
  2. Dominar los comandos relacionados para cambiar del modo de comando al modo de edición
  3. Dominar el uso de comandos relacionados en el modo de última línea de vim
  4. Ser capaz de decirle al flujo de trabajo de gcc Master el uso de parámetros comunes
  5. Competencia en la producción y uso de bibliotecas estáticas
  en Linux 6. Competencia en la producción y uso de bibliotecas compartidas en Linux


Contenido de aprendizaje

1. Uso de Vim
2. Uso del compilador gcc
3. Uso de biblioteca estática
en Linux 4. Uso de biblioteca dinámica en Linux


Tiempo de estudio
 22 de enero de 2021


1. Editor de Vim

  1. vim presenta brevemente

    vi: "interfaz virtual". Su estado en Linux es como un bloc de notas en Windows. Puede realizar operaciones de edición, eliminación, búsqueda, reemplazo, bloqueo y muchas otras operaciones de texto, y los usuarios pueden ajustar según sus propias necesidades Para su personalización, vi es un programa de edición de texto, no es como una hermosa interfaz visual en el Bloc de notas de Windows, use comandos para operarlo.

  1. Hay tres modos en vim:
     modo de comando, modo de edición, modo de última línea, la relación entre los tres es la siguiente
    Inserte la descripción de la imagen aquí


1.1. Modo de comando

mando operando
ZZ Guarde y salga a la línea de comandos del shell
gg = G Formato de código
h Cursor a la izquierda
j Cursor abajo
k Cursor a la derecha
w Mover una palabra de distancia
gg Cursor al principio del archivo
GRAMO Mueve el cursor al final del archivo
0 Cursor a la primera línea
PS Cursor al final de la línea
nG Salto de línea, ejemplo 12G, salto a la línea 12
X Eliminar un carácter después del cursor, equivalente a Del
X Eliminar el carácter antes del cursor, equivalente a Retroceso
dw Eliminar la palabra al principio del cursor, incluido el carácter en el cursor
d0 Elimina todo el contenido de la línea antes del cursor, excluyendo el carácter donde está el cursor.
re Todo el contenido de esta línea después de eliminar el cursor, incluido el carácter donde se encuentra el cursor
dd Borra la línea donde está el cursor (su esencia es cortar)
ndd Elimina la función especificada de la línea actual del cursor, como 15dd
ctrl + v Pero en el modo, puede mover el cursor para seleccionar el contenido especificado y luego hacer más instrucciones
tu Revocación paso a paso, equivalente a ctrl + z en word
aa Copiar línea actual
nyy Copiar n filas, como 10yy
pags Abra una nueva línea hacia abajo en la posición del cursor y pegue
PAGS Abra una nueva línea en la posición del cursor y pegue
Operación de corte Presione dd o ndd para eliminar, guarde las líneas eliminadas en el portapapeles y luego presione p / P para pegar
r Reemplazar personaje actual
R Reemplazar el carácter después del cursor en la línea actual
/ / xxxx, busque desde la posición del cursor, presione n para buscar hacia abajo, presione N para buscar hacia arriba
? ? xxxx, busque desde la posición del cursor, presione n para buscar hacia arriba, presione N para buscar hacia abajo
# Mueva el cursor al carácter con la búsqueda, luego presione n para buscar hacia arriba, presione N para buscar hacia abajo
shift + k Presione shift + k o k en el carácter con búsqueda, puede ver documentos de ayuda relacionados

1.2 Modo de edición

Ingrese los siguientes comandos desde el modo de comando y el orden del modo de edición:

mando operando
yo Insertar antes del cursor
un Insertar después del cursor
yo Insertar al principio de la línea donde está el cursor
UN Insertar al final de la línea donde está el cursor
O Cree una nueva línea debajo de la línea donde está el cursor, insértela al principio de la línea
O Cree una nueva línea encima de la línea donde está el cursor, insértela al principio de la línea
s Eliminar el carácter detrás del cursor, insertar desde la posición actual del cursor
S Eliminar la línea actual donde se encuentra el cursor, insertar al principio de la línea

1.3 Modo de última línea

Cambiar del modo de comando al modo de última línea: ingrese dos puntos (:)


mando operando
q abandonar
q! Forzar la salida
w Guardar cambios
wq Guardar y Salir
X Guardar y Salir
: s / antiguo / nuevo / Reemplace el primer antiguo en la línea donde está el cursor con nuevo
: s / antiguo / nuevo Reemplace todo lo antiguo donde está el cursor con nuevo
: m, ns / antiguo / nuevo / g Reemplace todo lo antiguo entre la línea mth y la línea nth con nueva
:% s / antiguo / g Reemplazar todo lo antiguo en el archivo actual con nuevo
: 1, $ s / antiguo / nuevo / g Reemplazar todos los cuerpos antiguos del archivo actual con nuevos (la primera línea a la última línea)
:% s / antiguo / nuevo / gc Igual que el anterior, pero cada reemplazo requiere la confirmación del usuario
ctrl + u Desplácese hacia abajo por la mitad de la pantalla (mueva el cursor hacia arriba)
ctrl + d Voltea la mitad de la pantalla (el cursor se mueve hacia abajo)
ctrl + f Levanta una pantalla
ctrl + b Voltear una pantalla
sp Pantalla dividida horizontal del archivo actual
vsp Pantalla dividida vertical del archivo actual
sp 文件名 当前文件和另一文件水平分屏
vsp 文件名 当前文件和另一文件垂直分屏
ctrl+w+w 多个窗口切换光标
wall/wqall/xall/qall/qall! 保存/保存退出/保存退出/退出/强制退出 分屏窗口

1.4vim的配置文件

用户级别的文件配置
 ~./vimrc,修改用户级别的配置文件文件指挥影响当前用户,不会影响其他用户
 例如在:在用户的家目录下的.vimrc 文件 添加
set nu 设置行号
set tabstop=4 设置缩进为4
set shiftwidth=4 设置gg=G缩进4个空格,默认缩进8个空格


系统级别的文件配置,不推荐!!

2.gcc 编译器

  • 参数
  • -v #参看gcc版本号,----version也行
  • -E #生成预处理文件
  • -S #生成汇编文件
  • -c #只编译,生成.o文件,可重定位文件
  • -I #指定同文件所在的路径
  • -L #指定库文件所在的路径
  • -l #指定库的名字
  • -o #指定生成的目标文件的名字
  • -g #包含调试信息,使用gdb调试需要添加参数-g
  • -On n=0~3 #编译优化级别
  • -D #编译时定义宏

3.静态库和共享库

3.1.1 什么是库

  • 库是二进制文件, 是源代码文件的另一种表现形式, 是加了密的源代码; 是一些功能相近或者是相似的函数的集合体.

3.1.2 库的作用

  • 提高代码的可重用性, 而且还可以提高程序的健壮性;
  • 可以减少开发者的代码开发量, 缩短开发周期.

3.1.3 使用方法

  • 头文件---包含了库函数的声明
  • 库文件---包含了库函数的代码实现
    注意: 库不能单独使用, 只能作为其他执行程序的一部分完成某些功能, 也 就是说只能被其他程序调用才能使用.

3.2.1 静态库

  • 静态库可以认为是一些目标代码的集合, 是在可执行程序运行前就已经加入到执行码中, 成为执行程序的一部分. 按照习惯, 一般以.a做为文件后缀名, 静态库的命名一般分为三个部分:
  • 前缀:lib
  • 库名称:自定义即可, 如test
  • 后缀:.a
    最终的静态库的文件名为:libtest.a

  1. 静态库的制作:
  2. 将c源文件生成对应的.o文件
    gcc -c fun1.c fun2.c
    或者分别生成.o文件:
    gcc -c fun1.c -o fun1.o
    gcc -c fun2.c -o fun2.o

  3. 使用打包工具ar将准备好的.o文件打包为.a文件
    在使用ar工具是时候需要添加参数rcs r更新、c创建、s建立索引
    命令:ar rcs 静态库名 .o文件 ar rcsbtes lit1.a fun1.o fun2.o

  • 静态库的使用
      静态库制作完成之后, 需要将.a文件和头文件一定发布给用户. 假设测试文件为main.c, 静态库文件为libtest1.a, 头文件为head.h 用到的参数:
  • -L:指定要链接的库的所在目录

  • -l:指定连接时需要的静态库,去掉前缀和后缀
  • -I:指定main.c文件用到的头文件head.h所在的路径

3.2.2 共享库

  • La biblioteca compartida no está vinculada al código de destino cuando se compila el programa, pero se carga cuando el programa se está ejecutando. Si diferentes aplicaciones llaman a la misma biblioteca, solo se requiere una copia de la biblioteca compartida en la memoria. Evite el problema. de desperdicio de espacio. La biblioteca dinámica se carga cuando el programa se está ejecutando, y también resuelve el problema de actualización, implementación y publicación del programa por la biblioteca estática. El usuario solo necesita actualizar la biblioteca dinámica, actualización incremental. Por qué La necesidad para las bibliotecas dinámicas en realidad se debe a las características de las bibliotecas estáticas. De acuerdo con la costumbre, ".so" se usa generalmente como la extensión del archivo. El nombre de las bibliotecas compartidas generalmente se divide en tres partes:
  • Prefijo: lib
  • Nombre de la biblioteca: personalizar, como prueba
  • Sufijo: .so
    El nombre de archivo de la biblioteca dinámica final: libtest.a

  1. La producción de biblioteca dinámica:
  2. Genere el archivo objeto .o, en este momento necesita agregar la opción del compilador: -fPIC (fpic)
    gcc -fpic -c fun1.c fun2.c Parámetros: -fpic
    crea un compilador independiente de la dirección, el propósito es ser capaz de ser utilizado en múltiples aplicaciones Compartido entre.

  3. Para generar una biblioteca compartida, agregue opciones de vinculador en este momento: -shared (especifique para generar una biblioteca de vínculos dinámicos)
    gcc -shared fun1.o fun2.o -o libtest2.so

  • Uso de la biblioteca dinámica :
      referencia a la biblioteca dinámica y compilación en un archivo ejecutable (igual que el método de biblioteca estática): Parámetros utilizados:
  • -L: especifique el directorio de la biblioteca que se vinculará

  • -l: especifique la biblioteca estática requerida para la conexión, elimine el prefijo y el sufijo

  • -I: Especifique la ruta donde se encuentra el archivo de encabezado head.h utilizado por el archivo
    main.c gcc main.c -l./ -L./ -ltest2 -o main2

3.3 Ventajas y desventajas de las bibliotecas estáticas y las bibliotecas compartidas

3.1 Biblioteca estática

ventaja:

	1.执行速度快, 是因为静态库已经编译到可执行文件内部了
	2.移植方便, 不依赖域其他的库文件

Desventajas:

	1.耗费内存, 是由于每一个静态库的可执行程序都会加载一次
	2.部署更新麻烦, 因为静态库修改以后所有的调用到这个静态库的可执行文件都需要重新编译

3.2 Biblioteca dinámica

ventaja:

	1.节省内存
	2.部署升级更新方便, 只需替换动态库即可, 然后再重启服务.

Desventajas:

	1.加载速度比静态库慢
	2.移植性差, 需要把所有用到的动态库都移植.

Supongo que te gusta

Origin blog.csdn.net/Woo_Hoo__/article/details/113001785
Recomendado
Clasificación