Podczas kompilacji kompilator tłumaczy kod na format tymczasowy, nazwijmy go plikiem obiektowym. W pliku obiektowym znajduje się lista symboli, których kompilator nie mógł rozwiązać, zwykle w innych miejscach. Faza łączenia jest odpowiedzialna za rozwiązywanie tych symboli.
Proces kompilacji przesyła pliki do łącznika do momentu rozstrzygnięcia wszystkich symboli. Nie ma fizycznych list zależności, tylko listy symboli do rozwiązania. Pozwala to na rozpoznawanie symboli przy użyciu różnych bibliotek. Na przykład można chcieć użyć biblioteki systemu Windows w przypadku problemów specyficznych dla systemu Windows; biblioteka linuxa dotycząca problemów specyficznych dla Linuksa. Nie oznacza to wprost, że program jest zależny od biblioteki systemu Windows; może być również zależne od systemu Linux.
Niektóre kompilatory mogą generować listy zależności, zwykle do użycia w procesie kompilacji. Jednak ostateczna odpowiedzialność spoczywa na programistach.
Jeśli nie chcę, aby wynikowy plik wykonywalny był obciążony, co mogę zrobić? – jmasterx
@Milo: możesz połączyć statyczne biblioteki zależności libSomthing z libA. –
@Milo: np. Nie chcesz mieć współdzielonych zależności? Następnie musisz połączyć wszystko statycznie, używając tylko bibliotek statycznych. Spowoduje to powstanie dużego niezależnego pliku wykonywalnego bez zależności. Ostrzegamy jednak, że trudno jest zbudować pewne biblioteki jako statyczne. – vines