Durante il processo di compilazione il compilatore traduce il codice in un formato temporaneo, chiamiamolo un file oggetto. Nel file oggetto c'è una lista di simboli che il compilatore non è in grado di risolvere, di solito definizioni altrove. La fase di collegamento è incaricata di risolvere questi simboli.
Il processo di compilazione invia i file al linker fino a quando tutti i simboli sono stati risolti. Non ci sono liste di dipendenze fisiche, solo elenchi di simboli da risolvere. Ciò consente di risolvere i simboli utilizzando librerie diverse. Ad esempio, si potrebbe voler utilizzare una libreria Windows per problemi specifici di Windows; una libreria linux per problemi specifici di Linux. Questo non afferma esplicitamente che un programma dipende da una libreria di Windows; potrebbe anche dipendere da quello di Linux.
Alcuni compilatori possono generare elenchi di dipendenze, in genere per l'utilizzo in un processo di compilazione. Tuttavia, la responsabilità ultima spetta al programmatore.
fonte
2011-10-20 20:45:08
Se non desidero che l'eseguibile risultante abbia l'onere, cosa posso fare? – jmasterx
@Milo: è possibile collegare le librerie statiche delle dipendenze di libSomthing in libA. –
@Milo: non si desidera alcuna dipendenza condivisa? Quindi devi solo collegare tutto staticamente, usando solo le librerie statiche. Ciò si tradurrà in un grande eseguibile autonomo senza dipendenze. Ma attenzione, è difficile costruire alcune librerie come quelle statiche. – vines