How symbols work and why we need them

Anders Schau Knatten

⏱ 60 minute session
beginner
09:30-10:30, Friday, 5th July 2024

Knowing how symbols work and how they are used can be very useful. Not only when solving linker errors but also when consuming or creating libraries, and even when creating executables. But most importantly, it is interesting to know how your binaries work!

The talk covers Linux and its ELF symbols in particular, but Windows has some similar concepts. It applies to both C and C++.

In this talk, I'll go over

  • What symbols are, and why do we need them
  • Why your program has three different symbol tables
  • The difference between binding and visibility and how C/C++ linkage relates to the two
  • Where symbols are stored and how to view them
  • Global, local, weak, and unique symbols
  • Allowing users to override your functions/globals
  • How the linker handles C++ templates and inline variables
  • Which entities need symbols and which don't
  • Symbol tables used in static and dynamic linking
  • Default vs hidden visibility and a useful idiom to work with these


🏷 elf
🏷 linux
🏷 symbols

Anders Schau Knatten

Anders started programming in Turbo Pascal in 1995, and has been programming professionally in various languages since 2001. He's currently a principal engineer at Ascenium in Oslo, working on a new CPU design. He's also the author of the book C++ Brain Teasers, CppQuiz.org and the blog C++ on a Friday.