conector del sistema Linux ld link es muy importante, si el orden no es correcto, se producirá un error de función de referencia indefinida, la siguiente serie le mostrará cómo organizar la conexión en Linux El orden en que ld está vinculado.
ld orden original para una serie de biblioteca de vínculos es muy sensible, de lo contrario se informará undefined referencia a un símbolo de la función de error, lo que significa que no se encuentra la definición de la función. De hecho, la biblioteca se puede abrir correctamente. Si la biblioteca libA.a depende de la biblioteca libB.a, entonces el argumento del conector debe ser ln -lA -lB, que debe escribirse así. De lo contrario estará mal.
Esto parece ser un legado de la historia. Para decirlo sin rodeos, si determina que una biblioteca no es importante, se pone al final, es decir, el orden en el que se cargan las bibliotecas está en orden, de izquierda a derecha, con la mayor prioridad, por lo que las máquinas en los tiempos antiguos estaban demasiado rotas. Los discos internos y duros, incluida la CPU, son extremadamente raros y preciosos. Por lo tanto, necesita obtener lo que necesita con anticipación y no lo necesita. Una vez que lo necesite, cárguelo. No lo cargue si no lo necesita. Esto puede explicar el error anterior, el compilador cargado en socketcomm, encontró que hay una biblioteca de dependencias, y luego búsquelo, hay una falla, por lo que está mal.
En otras palabras, las dependencias se colocan en la medida de lo posible para que todos puedan compartirlas.
Esto lleva a otro problema. Si hay varias bibliotecas que usan el mismo nombre de función o clase, ¿qué sucede con el nombre de la estructura?
Puede usar nm y readelf, ldd y otros comandos para ver las dependencias de su biblioteca, las tablas de símbolos y los símbolos de función exportados. Esto le permitirá verificar los diferentes resultados de compilación anteriores debido al pedido.
Divida la biblioteca de prueba en dinámica y dinámica, estática y estática;
El primer caso: la biblioteca estática contiene la misma función de nombre
El código es el siguiente:
gcc -L./main.c -lA -lB
Error de compilación, en definición múltiple de `XXX ‘. Repita la función de definición.
El segundo caso: la biblioteca en movimiento
Esto depende del orden de carga, como se mencionó anteriormente, comenzando desde la izquierda, cargando según sea necesario.
El código para el código es el siguiente:
gcc main.c. /libB.so. /libA.so
El código para el código es el siguiente:
gcc main.c. /libA.so. /libB.so
Este enlace está vinculado de manera implícita, o un enlace de tiempo de carga, mientras que la biblioteca estática anterior es una conexión de tiempo de compilación.
Es decir, el orden de compilación determina a qué biblioteca de la biblioteca se llama con el mismo nombre.
El tercer caso: carga en movimiento, pero dinámica, no la carga estática anterior.
El código para el código es el siguiente:
gcc main.c -ldl. /libA.so. /libB.so
El código para el código es el siguiente:
gcc main.c -ldl. /libB.so. /libA.so
Cuando no hay opción de enlace, es lo mismo que en el segundo caso. Después de agregar la opción L, especifique cuál cargar.
libB es un enlace estático! , libA se carga dinámicamente.
El código del código es el siguiente:
gcc -L./main.c -ldl – lB
El nombre de la biblioteca de la biblioteca dinámica se muestra en la opción de compilación. >
El código para el código es el siguiente:
gcc -L./main.c -ldl -lB. /libA.so
El código para el código es el siguiente:
gcc -L./main.c -ldl. /libA.so -lB
Cuando hay estática y dinámica, no agregue el nombre de la biblioteca de la biblioteca dinámica a la opción de compilación, la salida es normal. Si se agrega, la biblioteca estática está relacionada principalmente con el orden de los enlaces.
Lo anterior es la introducción del orden de enlace ld del conector en el sistema Linux. Un orden diferente dará como resultado resultados de compilación diferentes. Por lo tanto, debe colocarse lo más lejos posible después de la dependencia. ¿Recuerda?
El comando de Linux reconfig se puede usar para convertir archivos de configuración
en Linux El comando de lectura en Linux se usa principalmente para leer e ingresar terminales o arc
Si está utilizando un servidor en la nube, el sitio web no se abrirá, por lo que la
En el sistema Uuntu, muchos usuarios han configurado el nombre de la cuenta y la contraseña, pero al
Linux usa el comando de script para guardar el registro de operación del usuario
Cómo Linux puede modificar rápidamente el archivo sql en la ID especificada
Cómo hacer RPM utilizando FPM en el sistema Linux
Ubuntu sudo error comando no se encuentra cómo hacerlo?
Cómo instalar y configurar Zsh en Linux
Sistema VLAN de Linux, cambio de Capa 3 y diferencia de troncales
¿Cómo usar el comando df para ver el espacio en disco de Linux?
Pasos de Linux para enviar correo a través de la línea de comando
Cómo instalar y usar NeoBundle con Linux
Ubuntu imagen ISO usando ejemplos SHA256 probar la integridad del sistema
lanmp /lámpara /PNMB un paquete de instalación de la llave en Linux
WINDOWS 7+ Ruijie No hay permiso de acceso a Internet después de la instalación
Sistema Win8: cómo cerrar rápidamente la interfaz de Metro
El sistema Win8 solicita una solución de Infracción de acceso en la dirección
Cuando se le solicite que inicie el editor vi en Linux, pregunte E325: ¿Qué debería hacer ATENCIÓN?
Windows XP instalación pregunta respuesta selección
Dell dejará de vender la computadora XP
La solución al fallo del teclado después de encender la computadora
Consejos comunes de solución de problemas del sistema Windows 7