Zarządzanie symbolami to główna funkcja linkera.
Linkery zarządzają wieloma różnymi rodzajami symboli oraz referencjami symboli pomiędzy poszczególnymi modułami. Każdy taki moduł zawiera swoją tablicę symboli:
• symbole globalne zdefiniowane w module
• symbole globalne zewnętrzne (nie są zdefiniowane w module, jednak w module są do nich odwołania)
• nazwy segmentów
• symbole nieglobalne, głównie na użytek debuggerów i zrzutów w razie wywalenia się programu - nie są one niezbędne do procesu linkowania (opcjonalne)
• informacje o numerach linii, pokazują zależność między kodem źródłowym a kodem wynikowym (opcjonalne)
Formaty symbol table (stabs)
Tablice symboli dla linkerów są podobne do tych dla kompilatorów, a nawet trochę prostsze, jako że jest mniej rodzajów symboli, które musi obsługiwać linker niż kompilator. W jednej tablicy trzymane są informacje o plikach wejściowych oraz modułach bibliotek, kolejna tablica to tablica zmiennych globalnych, które linker musi przeanalizować w plikach wejściowych. Trzecia tablica może trzymać dodatkowe symbole używane do debbugowania.
Tablica symboli jest najczęściej trzymana jako tablica wskaźników, indeksowana funkcją haszującą. Dawniej, linkery obsługiwały tylko krótkie nazwy (od 2 znaków na najprostszych komputerach, 6 na komputerach HP, do 8 znaków na maszynach IBM i wczesnych systemach UNIX-owych). Współczesne linkery wspierają dużo dłuższe nazwy, nie tylko dlatego, że programiści używają coraz dłuższych nazw, ale też dlatego, że kompilatory przekształcają nazwy na dłuższe, kodując w nich dodatkowe informacje, (ćwiczenie.)