árbol de directorios de archivos es la siguiente, como puede ver, muy simple. 1. libtest /2. |
- lt.c 3. |
- lt.h 4. `- test.c # lt.c 1. 4. 5. #include 6. 7. void myprint (void) 8. {9. printf (" Linux library test! /n " ); 10.} # lt.h 1. 4. 5. void myprint (void); # test.c 1. 4. 5. #include " lt.h " 6. 7. int main (void) 8. {9. myprint (); 10. return 0; 11.} Primer vistazo a la biblioteca estática que se creó primero en la biblioteca estática liblt.a. 1. $ gcc -o lt.o -c lt.c 2. $ ar cqs liblt.a lt.o De nuevo, enlace, 1. $ gcc test.o liblt.a -o prueba Esta vez para ver su referencia nuevamente Situación de la biblioteca. 1. $ ldd test 2. linux-gate.so.1 => (0xffffe000) 3. libc.so.6 => /lib/libc.so.6 (0xb7e29000) 4. /lib /ld-linux. So.2 (0xb7f6e000) La biblioteca dinámica se convierte en la biblioteca dinámica liblt.so. 1. $ gcc -o lt.o -c lt.c 2. $ gcc -shared -Wall -fPIC -o liblt.so lt.o -shared Esta opción especifica generar una biblioteca de enlaces dinámicos (deje que el conector genere un tipo T de exportación) Las tablas de símbolos, a veces también generan símbolos de exportación de tipo W débilmente conectados, no se pueden conectar sin el programa externo. Equivalente a un archivo ejecutable -fPIC: significa compilar en un código independiente de la posición. Sin esta opción, el código compilado depende de la posición, por lo que la carga dinámica se realiza mediante la copia del código para satisfacer las necesidades de diferentes procesos, pero no El propósito de compartir código real de segmento. -L .: indica que la biblioteca que se va a conectar está en el directorio actual -ltest: El compilador tiene una convención de nomenclatura implícita al buscar la biblioteca de enlace dinámico, es decir, prefijando el nombre dado con lib, seguido de .so para determinar la biblioteca Nombre LD_LIBRARY_PATH: esta variable de entorno indica la ruta en la que el conector dinámico puede cargar la biblioteca dinámica. Método de enlace I, cópielo en la biblioteca del sistema y enlácelo, deje que gcc lo encuentre usted mismo. $ Sudo cp liblt.so /usr /lib 2. $ gcc -o test test.o -llt Aquí podemos ver la opción -llt, - l [lib_name] especifica el nombre de la biblioteca, y buscará activamente lib [lib_name] .so. La ruta a esta búsqueda se puede encontrar en gcc --print-search-dirs. Método de enlace II, especifique manualmente la ruta de la biblioteca 1. $ cc -o test test.o -llt -B /ruta /a /lib La opción -B aquí agrega /ruta /a /lib a la ruta de la búsqueda de gcc. No hay ningún problema con este enlace, pero el programa vinculado manualmente en el Método II aún debe especificar la ruta de la biblioteca (el enlace y la ejecución son independientes). Debe agregar la variable de sistema LD_LIBRARY_PATH: 1. $ export LD_LIBRARY_PATH = /path /to /lib Esta vez para verificar el estado del enlace de la biblioteca del programa de prueba (método I) 1. $ ldd test 2. linux-gate.so.1 =>; (0xffffe000) 3. liblt.so => /usr/lib/liblt.so (0xb7f58000) 4. libc.so.6 => /lib/libc.so.6 (0xb7e28000) 5. /lib /ld -linux.so.2 (0xb7f6f000) Bueno, ¿hay más liblt.so que un programa vinculado estáticamente? Bueno, esta es la mayor diferencia entre estática y dinámica. En el caso estático, carga la biblioteca directamente en el programa. Cuando se vincula dinámicamente, solo mantiene la interfaz y separa la biblioteca dinámica del código del programa. Esto puede mejorar la reutilización del código y reducir el acoplamiento del programa. Además, durante el tiempo de ejecución, para garantizar que el programa principal pueda encontrar la biblioteca dinámica, la biblioteca dinámica generalmente se libera en el directorio del sistema, o en una ruta relativamente fija al programa principal, de modo que no importa cuándo y dónde se ejecute el programa principal en la máquina. Puede encontrar una biblioteca dinámica. Cuando la biblioteca estática solo funciona en enlaces, el archivo de biblioteca estática no existe cuando se ejecuta el programa principal.
A medida que crece la demanda de soluciones de PaaS y DevOps, podemos ver que las aplicaciones her
Con Windows durante mucho tiempo, inevitablemente comenzará a perder frescura, por lo que algunas pe
◆ instalación y entrada: inicio de sesión, apagar, detener, reiniciar, instalación, montaje, umount,
Descarga NetBeans Toma netbeans-7.0beta2-ml-javaee-linux.sh como ejemplo #sh netbeans-7.0beta2
Linux agregar comando de arranque
Centos instalar apache tutorial detallado
El tutorial de configuración de Yum
LED de unidad de un solo chip, tubo digital, pantalla lcd
Vm.swappiness desactiva la mejora de rendimiento de la partición de intercambio
Usuario de Linux y permisos de usuario de apache bajo Linux
El firewall CentOS 6.2 abre, cierra y abre el puerto
Problema con la configuración de apache bajo Fedora Linux
Proceso zombie de Linux y su solución
Instalar la versión completa de Linux en la computadora portátil
¿Cómo borrar los registros WeChat eliminados? Cómo verificar el registro de chat de WeChat
Debe conocer los accesos directos comunes para Win 7 (1)
"Uso de notificaciones push para conectar iTunes" al abrir el programa
¿Cómo modificar el fondo de la interfaz de inicio de sesión de bienvenida?
Exposición a los resultados de las pruebas de rendimiento de Windows 10 y win8.1
Cómo encontrar rápidamente la ubicación de los favoritos de win8
Trueno mira el reproductor en línea a pedido enlace gráfico magnético tutorial
¿Es la seguridad de Windows 7 de 64 bits superior a 32 bits? Realmente no necesariamente