Symbol Resolution
Symbol resolution is the linker's process of matching undefined symbols (like function calls) with their definitions across object files.
Symbol Resolution
Symbol Table
Resolution Process
Select a symbol to see resolution process
Successful Resolution
All symbols found and linked correctly
Symbol Types
Strong Symbols
Initialized globals and functions:
int x = 10; // Strong void func() { } // Strong
Weak Symbols
Uninitialized globals:
int y; // Weak __attribute__((weak)) int z = 5; // Explicitly weak
Undefined Symbols
External references:
extern int external_var; // Undefined void external_func(); // Undefined
Resolution Rules
- Multiple strong symbols → Error
- One strong, multiple weak → Choose strong
- Multiple weak symbols → Choose any
- No definition found → Undefined reference error
Name Mangling
C++ encodes function signatures for overloading:
void func(int) // _Z4funci void func(double) // _Z4funcd void func(int, int) // _Z4funcii // Prevent mangling with C linkage extern "C" void c_func();
Common Errors & Solutions
Undefined Reference
undefined reference to `function()'
Solutions:
- Ensure function is implemented
- Link the correct library
- Check name mangling (C vs C++)
Multiple Definition
multiple definition of `variable'
Solutions:
- Use
externin headers - Use
inlinefor C++17 - Use anonymous namespaces
Viewing Symbols
# List symbols nm object.o # Demangle C++ symbols nm object.o | c++filt # Undefined symbols only nm -u object.o
Next Steps
- Understand Dynamic Linking
- Learn about GOT/PLT
- Explore Memory Layout
