Hola traducción del lenguaje C: biblioteca estática y biblioteca dinámica (8)

1. Al cifrar archivos, primero debe compilar el archivo de origen en un archivo de destino.

gcc -c 目标文件.c

2. Cree un archivo que contenga varios archivos .o en el directorio de la biblioteca
(1) Ingrese el directorio lib en MinGW. El que tiene el sufijo .a es el archivo.
(2) Utilice el comando ar para crear un archivo

ar -rcs libhfsecurity.a encrypt.o checksum.o

-r significa actualizar el archivo .a si existe
-c significa no mostrar comentarios al crear el archivo.
-s le dice a ar que indexe al comienzo del archivo .a.
.a es el archivo .a recién creado
. .o archivo es el archivo guardado en el archivo .a
. 3. Todos los nombres de archivos .a tienen el formato libXXX.a. Esta es la forma estándar de nombrar archivos. Los archivos son bibliotecas estáticas.
4. Cree un archivo de biblioteca para que pueda usarlo en otros programas. Después de instalar el archivo en un directorio estándar, puede compilar el código con el modificador -l.

gcc test_code.c -lhfsecurity -o test_code

Si desea guardar el archivo en otro lugar, use la opción -L

gcc test_code.c -L/my_lib -lhfsecurity -o test_code

5. El programa se compone de diferentes códigos: primero cree el archivo .o y el archivo .a, y luego vincúlelos a un programa ejecutable. Una vez vinculado el programa, se convierte en un gran fragmento de código objeto y no hay forma de separar el código de visualización y el código del sensor. Porque están vinculados estáticamente entre sí al compilar el programa.
6. El núcleo de la biblioteca dinámica es una pieza de código objeto; la biblioteca dinámica consta de información adicional, que el sistema operativo necesita usar para vincular la biblioteca al programa; la biblioteca dinámica es creada por uno o más .O archivos.
7. La biblioteca dinámica crea un archivo de destino.

gcc -I/includes -fPIC -c hfcal.c -o hfcal.o

-fPIC le dice a gcc que cree código independiente de la posición.
8. El código independiente de la posición es código que puede ejecutarse sin importar dónde lo cargue la computadora en la memoria. Puede moverse en la memoria.
El sistema operativo Windows utiliza una tecnología llamada mapeo de memoria al cargar bibliotecas dinámicas.
9. Las bibliotecas dinámicas se llaman igual para cada plataforma. Los nombres de los sufijos son diferentes, pero el método de creación es el mismo.
Windows: biblioteca de enlaces dinámicos, el sufijo es .dll.
Linux y Unix: archivos de objetos compartidos, el sufijo El nombre es .so.
Mac: biblioteca dinámica, el nombre del sufijo es .dylib.

gcc -shared hfcal.o -o C:\libs\hfcal.dll(Windows上的MinGW)
gcc -shared hfcal.o -o /libs/libhfcal.dll.a(Windows上的cygwin)
gcc -shared hfcal.o -o /libs/libhfcal.so
gcc -shared hfcal.o -o /libs/libhfcal.dylib

La opción -shared le dice a gcc que convierta el archivo objeto .o en una biblioteca dinámica.
Nota: Una vez que la biblioteca se compila con un nombre determinado, el nombre del archivo no se puede modificar.
En algunos sistemas Mac antiguos, no existe la opción compartida
10. Cuando se crea la biblioteca dinámica, se puede utilizar como una biblioteca estática.
11. Si compila el programa con MinGW, debe determinar el entorno antes de ejecutarlo.
Insertar descripción de la imagen aquí

12. Compile la nueva versión de la biblioteca dinámica.

gcc -c -fPJC hfcal_UK.c -o hfcal.o           //把源文件编译为目标文件
gcc -shared hfcal.o -o /usr/local/lib/libhfcal.so     //把目标文件转换为共享目标文件

13. Cuando la biblioteca dinámica y los archivos de encabezado están instalados en el directorio estándar, no es necesario utilizar el estándar -l al compilar y no es necesario configurar la variable LD_LIBRARY_PATH al ejecutar el código.
14. Cuando quiero cambiar el nombre de la biblioteca dinámica, cambio el nombre del archivo, pero el compilador no puede encontrarlo: el compilador
guardará el nombre de la biblioteca en el archivo al compilar la biblioteca dinámica. Si se cambia el nombre del archivo, el nombre del archivo no ha cambiado. Si el nombre de la biblioteca dinámica se modifica permanentemente, se debe volver a compilar.

Supongo que te gusta

Origin blog.csdn.net/weixin_46504000/article/details/129245319
Recomendado
Clasificación