Решение ошибок сборки⚓︎
При сборке пакетов иногда происходят ошибки. В данном разделе будет описано решение наиболее распространённых ошибок.
Стадии, на которых может произойти ошибка⚓︎
Ошибка может произойти на любой стадии, однако чаще всего это случается после ввода make. При этом в первую очередь определите действие, которое завершилось ошибкой - сделать это можно, просмотрев команду, завершившуюся с ошибкой. В частности, если команда даётся компилятору (cc, gcc или clang), то произошла ошибка компиляции. Эти ошибки, обычно, наиболее трудны в решении. Если команда даётся ld, то ошибка произошла при линковке. Также ошибка может произойти, например, при построении документации. В этом случае самым простым вариантом будет отключение выполнения этого шага.
Общие принципы решения ошибок⚓︎
Убедитесь что ошибка воспроизводима - выполните make clean
, а потом повторите make
.
Если ошибка не исчезла, то прочитайте лог (хотя бы последние 30 строк).
Практически всегда там будет сказано о том, что за ошибка произошла.
Попробуйте поискать в интернете по частям лога, возможно, решение этой ошибки уже было где-либо описано.
Ошибки компиляции⚓︎
Ошибки компиляции - наиболее сложные в своём решении. gcc всегда сообщает строку, в которой произошла ошибка - проверьте её.
Не найден заголовок⚓︎
Весьма простая ошибка.
Вывод⚓︎
dummy.c:1:10: fatal error: blablabla: No such file or directory
1 | #include <blablabla>
| ^~~~~~~~~~~
compilation terminated.
Имя заголовка и файла может быть другим.
Решение⚓︎
Поищите этот заголовок в папке /usr/include
и директории с исходным кодом пакета. Если он существует, то добавьте в переменную CPPFLAGS
параметр -I/путь/к/директории/с/этим/заголовком
. Если он не существует - установите пакет, который его предоставляет.
Ошибки линковки⚓︎
В процессе линковки несколько объектных файлов соединяются в один, и к ним подключаются библиотеки.
undefined reference to ...⚓︎
Данная ошибка вызвана тем, что необходимая библиотека не была подключена.
Решение⚓︎
Попытайтесь определить, исходя из лога, какая библиотека не была подключена. Добавьте в переменную CFLAGS
параметр -lsomelib (не надо указывать название файла библиотеки), например, -lcurses
.
Ошибки configure⚓︎
Обычно они происходят из-за отсутствия зависимостей или их неработоспособности.