Ejercicio introductorio incorporado_3
- Utilice gcc para generar una biblioteca estática y una biblioteca dinámica .so
- La generación y el uso de archivos de biblioteca estáticos .ay .so en Linux
- Ejercicios independientes sobre la generación y uso de bibliotecas estáticas.
- Ejercicios independientes sobre la generación y uso de bibliotecas dinámicas.
- Comandos de uso común de GCC
- Uso común de ensamblado GCC y archivos Binutils y ELF
- Comparación del uso del comando nasm y el tamaño del archivo ejecutable generado
- Las principales funciones de las maldiciones, escribe los nombres y funciones de varias funciones básicas.
- Experimente BBS en el sistema win10
- Instale la biblioteca de curses y la ubicación de instalación de los archivos de encabezado y los archivos de biblioteca
- Utilice gcc para compilar y generar un juego de terminal y ejecutarlo (juego de serpientes).
- para resumir
Utilice gcc para generar una biblioteca estática y una biblioteca dinámica .so
Ejemplo 1: Escriba tres archivos, incluido el archivo de encabezado de definición de función hello.h, el archivo de contenido c de función hello.c y el archivo c main.c del programa principal para realizar pruebas.
El procedimiento es:
hello.h:
#ifndef HELLO_H
#define HELLO_H
void hello(const char*name);
#endif//HELLO_H
hello.c:
#include<stdio.h>
void hello(const char*name)
{
printf("Hello%s!\n",name); }
main.c:
include"hello.h"
int main()
{
hello("everyone");
return 0;
}
程序作用是调用hello输出Hello everyone
Primero, use el editor de archivos para editar tres archivos:
Segundo, tanto las bibliotecas estáticas como las bibliotecas dinámicas son creadas por archivos .o. Por lo tanto, primero debemos compilar el programa fuente hello.c en un archivo .o a través de gcc:
3. Cree una biblioteca estática a partir del archivo .o y escriba el siguiente comando en el indicador del sistema para crear el archivo de biblioteca estática libmyhello.a :
4. En el programa Use la biblioteca estática en:
5. Verifique si la función pública hola está realmente conectada al archivo de destino hola, elimine la biblioteca estática y pruebe si el programa se ejecuta normalmente:
Después de eliminar la biblioteca estática, el El programa se ejecuta normalmente, lo que indica que la función interna se ha conectado al código de destino.
6. Cree una biblioteca dinámica con hello.o, escriba el siguiente comando en el indicador del sistema para obtener el archivo de biblioteca dinámica libmyhello.so:
7. Utilice la biblioteca dinámica en el programa, copie el archivo libmyhello.so en el directorio / usr / lib, de lo contrario Al llamar a la biblioteca dinámica, el sistema no encontrará este archivo, llamará y generará el archivo ejecutable hello2 y ejecutará:
Nota: El archivo de la biblioteca dinámica se copia en el directorio lib del usuario y el archivo de la biblioteca dinámica debe mantenerse en el directorio original; de lo contrario, el sistema no encontrará la biblioteca dinámica, lo que provocará un error de compilación.
La generación y el uso de archivos de biblioteca estáticos .ay .so en Linux
1. Etapa de preparación; crea cuatro archivos, respectivamente
A1.c:
#include <stdio.h>
void print1(int arg)
{
printf("A1 print arg:%d\n",arg); }
A2.c:
#include <stdio.h>
void print2(char *arg)
{
printf("A2 printf arg:%s\n", arg); }
A.h:
#ifndef A_H
#define A_H
void print1(int);
void print2(char *);
#endif
test.c:
#include <stdlib.h>
#include "A.h"
int main()
{
print1(1);
print2("test");
exit(0); }
2. Generación de biblioteca estática: la biblioteca estática es generada por el archivo .o, por lo que primero compile el archivo c para convertirlo en el archivo .o:
3. Luego, genere una biblioteca estática llamada libafile.a a partir de dos archivos .o
. Llamar a la biblioteca El archivo se compila y luego se ejecuta.
5. La generación del archivo .so de la biblioteca compartida: la biblioteca dinámica también se genera en función del archivo .o, por lo que primero compile el archivo c para convertirlo en el archivo .o:
6 Genere la biblioteca dinámica basada en el archivo .o:
después de generar la biblioteca dinámica La biblioteca debe copiarse en la biblioteca del usuario, de lo contrario, el sistema no puede encontrar la biblioteca y no se puede llamar.
7. Utilice el archivo de biblioteca .so para crear un programa ejecutable:
Ejercicios independientes sobre la generación y uso de bibliotecas estáticas.
Tema: Además de la función x2x, expanda y escriba una función x2y (función autodefinida), el código de la función principal llamará a x2x y x2y; escriba estas 3 funciones en 3 archivos .c separados y use gcc para compilarlas en 3 Un archivo de objeto .o; use la herramienta ar para generar un archivo de biblioteca estática .a a partir de los archivos de objeto x2x y x2y, y luego use gcc para vincular el archivo de objeto de la función principal con este archivo de biblioteca estática para generar el ejecutable final programa
. Escribe tres programas principales:
2. Los archivos de compilación para generar archivos .o:
3. generar archivos de biblioteca estática basada en x2x.o y x2y.o:
Cuarto, llame al archivo estático para conectar mian.c para generar un archivo ejecutable y ejecute:
Ejercicios independientes sobre la generación y uso de bibliotecas dinámicas.
1. Realice ejercicios de biblioteca dinámica sobre la base de los ejercicios de biblioteca estática anteriores y también genere bibliotecas dinámicas basadas en archivos .o:
2. Copie la biblioteca dinámica en el directorio lib del usuario:
3. Llame al archivo estático para conectar mian.c para generar un archivo ejecutable y ejecute:
Comandos de uso común de GCC
1. El proceso de compilación detallado de gcc, preprocesamiento:
2. Compilación en código ensamblador:
3. Ensamblaje:
4. Vinculación y ejecución:
5. Compilación de varios archivos de programa:
gcc -c test1.c -o test1.o
gcc -c test2.c -o test2.o
gcc test1.o test2.o -o test
Seis, conexión de archivos de biblioteca
gcc –c –I /usr/dev/mysql/include test.c –o test.o
gcc –L /usr/dev/mysql/lib –lmysqlclient test.o –o test
Siete, use la biblioteca de enlaces estáticos cuando los enlaces sean obligatorios
gcc –L /usr/dev/mysql/lib –static –lmysqlclient test.o –o test
Uso común de ensamblado GCC y archivos Binutils y ELF
1. Después del preprocesamiento, algunos campos del archivo .i:
2. Algunos campos en el archivo .s después de compilar el archivo:
3. Use el comando as en Binutils para ensamblar:
4. Vínculo:
1. Use la biblioteca dinámica para vincular :
2. Utilice una biblioteca estática para la vinculación:
A través de la comparación, se encuentra que el archivo ELF generado tiene un espacio de gran tamaño debido a las dos formas de conexión diferentes, lo que demuestra que la dinámica ahorra más espacio que la estática.
5. Vea la información de cada parte del archivo ELF:
6. Desmonte el ELF:
objdump -D hello
Comparación del uso del comando nasm y el tamaño del archivo ejecutable generado
Obviamente, comparando el tamaño del archivo ejecutable, se encuentra que el archivo ejecutable generado al compilar con el comando nasm es mucho más pequeño.
Las principales funciones de las maldiciones, escribe los nombres y funciones de varias funciones básicas.
Curses funciona en pantallas, ventanas y subventanas. La pantalla es el área de visualización total disponible del dispositivo (para el terminal, todas las posiciones de caracteres disponibles en la ventana) y la ventana está relacionada con rutinas específicas. Como la ventana stdscr básica, etc.
关于屏幕的常用部分代码:
int addch(const chtype char_to_add);//当前位置添加字符
int addchstr(chtype *const string_to_add);//当前位置添加字符串
int printw(char *format, ...);//类似与printf
int refresh(void);//刷新物理屏幕
int box(WINDOW *win_ptr, chtype vertical, chtype horizontal);
//围绕窗口绘制方框,用vertical绘制垂直边,用horizontal绘制水平边
int insch(chtype char_to_insert); //插入一个字符(已有字符后移)
Experimente BBS en el sistema win10
En el sistema win10, "Panel de control" -> "Programas" -> "Habilitar o cerrar funciones de Windows", habilite "cliente telnet" y "Subsistema de Windows para Linux". Luego abra una ventana de línea de comando cmd e ingrese telnet bbs.newsmth.net en la línea de comando
Instale la biblioteca de curses y la ubicación de instalación de los archivos de encabezado y los archivos de biblioteca
安装代码:
sudo apt-get install libncurses5-dev
Utilice gcc para compilar y generar un juego de terminal y ejecutarlo (juego de serpientes).
Escriba el código fuente de Snake, gcc compila y ejecuta el archivo ejecutable:
para resumir
Este experimento es muy importante para comenzar con una comprensión preliminar de las bibliotecas estáticas y las bibliotecas dinámicas. En la creación y el uso de bibliotecas estáticas y bibliotecas dinámicas, tengo un conocimiento profundo de la diferencia entre bibliotecas estáticas y bibliotecas dinámicas, y la diferencia entre las condiciones de trabajo de los dos. La estructura básica y el principio de funcionamiento de los archivos de biblioteca tienen más comprensión, especialmente el proceso de ensamblaje de programas ejecutables. En el proceso de exploración, puede sentir claramente que la dificultad radica en que la biblioteca dinámica debe habilitar permisos de administrador al copiar, y el directorio original También debe existir una biblioteca dinámica en. Además, entiendo el formato de archivo ELF, el formato de lenguaje ensamblador y las herramientas para trabajar con gcc en la compilación. También hay un experimento de ejecución de distribución en tiempo de compilación de gcc, que me brindó nuevos conocimientos sobre el principio de funcionamiento de gcc.