Сборка проектов LinuxWindowsmacOS

Компоновщик: undefined reference / cannot find -l

  • Обновлено
  • Чтение ≈ 2 минуты

Краткий ответ

Нет библиотеки или неверный порядок линковки. Установите dev-пакет, укажите -L и -l и проверьте порядок.

В этой статье
  1. Что означает ошибка
  2. Причины и признаки
  3. Пошаговое решение
  4. Если проблема осталась

#Что означает ошибка

Сообщение
undefined reference

Нет библиотеки или неверный порядок линковки. Установите dev-пакет, укажите -L и -l и проверьте порядок.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Нет dev-пакетаСообщение cannot find -lNAME.Установите dev-библиотеку подходящей архитектуры.
Порядок -lСимвол определён, но объектное звено идёт после библиотеки.Исправьте порядок объектов и -l.
Нет -LПуть к пользовательской библиотеке отсутствует.Используйте документированный -L или pkg-config.
Разная ABIАрхитектура или ABI библиотеки не совпадает.Соберите совместимую библиотеку и компилятор.

#Пошаговое решение

  1. Сохраните полную команду компоновкиОткройте терминал проекта и повторите сборку с подробным выводом (для CMake cmake --build build --verbose). Найдите строку undefined reference to ... либо cannot find -lNAME. Первая говорит об отсутствующем определении символа, вторая — о ненайденной библиотеке; это разные действия.
  2. Если библиотека не найденаПроверьте наличие файла libNAME.so или libNAME.a в путях библиотеки и dev-пакета. В Linux выполните pkg-config --libs ИМЯ_ПАКЕТА после установки официального пакета разработки; имя пакета берите из документации проекта. Сверьте архитектуру через file имя_библиотеки, не подсовывайте библиотеки другой платформы.
  3. Если ссылка на символ не разрешенаСверьте точное написание функции и её сигнатуру, наличие исходного файла в целях сборки и порядок аргументов в ручной команде g++: объектные файлы обычно должны идти перед -l.... Для C++ проверьте совместимость компиляторов и ABI. Не создавайте фиктивную реализацию и не удаляйте сообщения компоновщика из настроек.
  4. Проверьте окончательную сборкуВыполните сборку прежним инструментом и проверьте, что появилась исполняемая программа или библиотека. Если cannot find -l сменилось на undefined reference, это отдельный этап диагностики — приложите точную команду, платформу, список библиотек и первые строки ошибок.

#Если проблема осталась

Если «Компоновщик: undefined reference / cannot find -l» повторяется, сохраните время, состояние подключения и точный текст ошибки. Не меняйте сразу несколько настроек — иначе станет трудно понять, какое действие повлияло на результат.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.