Назад к вопросам
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", подключена ли библиотека — для GNU ld и gold после использующих её объектных файлов? nm покажет, определён ли символ, ldd — разделяемые библиотеки.
- Ставить
-lfooперед объектными файлами, которые её используют, — GNU ld и gold не возвращаются к уже пройденной библиотеке (lld возвращается) - Определить функцию в заголовке и использовать из нескольких TU без
inlineили template — multiple definition - Забыть линковать
pthread,m,dl
- Почему GNU ld требует ставить библиотеку после использующих её объектных файлов, а lld — нет?
- Как в Linux найти библиотеку, экспортирующую нужный символ?