Jump to content

Guidelines and HOWTOs/Debugging/Linker Errors: Difference between revisions

From KDE Community Wiki
Dfaure (talk | contribs)
Tell people how to debug undefined symbols
 
Ochurlaud (talk | contribs)
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging Linker Errors}}
 


{{TutorialBrowser|
{{TutorialBrowser|

Latest revision as of 12:32, 11 March 2016


Debugging Linker Errors
Tutorial Series   Getting Started
Previous   None
What's Next   n/a
Further Reading   n/a

Abstract

This tutorial gives precise steps for debugging issues related to linking of applications and libraries.

Undefined symbol

When the linker says undefined reference to 'Foo', and you don't understand why, follow the following steps:

  • Check that the library that is supposed to provide this symbol is actually in the link line. To see the full link line with cmake, use make VERBOSE=1. If -lkdecore is the link line, then we're at least asking the linker to link to libkdecore.
  • Check that the right version of the library is linked in, rather than one from the wrong place. To see which library is actually used by ld, copy/paste the full link line from make VERBOSE=1, and add to it: -Q -v -Wl,-t. Somewhere in the verbose output you'll see the full path to each library being used.
  • Check that the library actually provides the symbol. nm -D -C /path/to/lib.so | grep Foo will tell you. If the symbol shows up with a 'T' or a 'W' in the second column, then it is indeed provided by the library. If it shows up with a 'U' then it is undefined in this library, and is supposed to be provided by another.