JuniorДебаггингЧастоЕщё не отвечали
Как дебажить ошибку линковки 'undefined reference to'?
Сборка чисто компилирует каждую единицу трансляции, но падает на этапе линковки с таким выводом. Опишите, как вы будете искать причину.
$ g++ -o app main.o -lutil
/usr/bin/ld: main.o: in function `main':
main.cpp:(.text+0x2a): undefined reference to `compute(int)'
/usr/bin/ld: main.cpp:(.text+0x41): undefined reference to `Logger::write(char const*)'
collect2: error: ld returned 1 exit status
Определите причину.
Демангл через c++filt, затем проверьте: скомпилировали .cpp с определением, не забыли extern "C", верный ли порядок линковки, подключили ли библиотеку? nm libfoo.a | grep sym покажет, определён ли символ; ldd binary показывает разрешённые shared-зависимости.
- ✗Ставить
-lfooперед объектником, который её использует — порядок важен - ✗Определить функцию в заголовке и использовать из нескольких TU без
inlineили template — multiple definition - ✗Забыть линковать
pthread,m,dl
- →Почему порядок линковки важен для статических, но не для shared?
- →Как найти библиотеку, экспортирующую нужный символ?