Durante el proceso de compilación, el compilador traduce el código en un formato temporal, vamos a llamarlo un archivo de objeto. En el archivo objeto, hay una lista de símbolos que el compilador no pudo resolver, generalmente definiciones en otros lugares. La fase de enlace se encarga de resolver estos símbolos.
El proceso de compilación carga los archivos al enlazador hasta que se resuelvan todos los símbolos. No hay listas de dependencia física, solo listas de símbolos para resolver. Esto permite que los símbolos se resuelvan utilizando diferentes bibliotecas. Por ejemplo, uno puede querer usar una biblioteca de Windows para problemas específicos de Windows; una biblioteca de Linux para problemas específicos de Linux. Esto no establece explícitamente que un programa depende de una biblioteca de Windows; también podría depender del Linux.
Algunos compiladores pueden generar listas de dependencias, generalmente para el uso en un proceso de compilación. Sin embargo, la responsabilidad final depende del programador.
Si no quiero que el ejecutable resultante tenga la carga, ¿qué puedo hacer? – jmasterx
@Milo: podría vincular las bibliotecas estáticas de las dependencias de libSomthing a libA. –
@Milo: es decir, ¿no quieres tener dependencias compartidas? Entonces solo tiene que vincular todo de forma estática, utilizando solo bibliotecas estáticas. Esto dará como resultado un gran ejecutable autónomo sin dependencias. Pero tenga cuidado, es difícil construir algunas bibliotecas como estáticas. – vines