Lx4U-book/docs/additional/error-fix.md

4.0 KiB
Raw Blame History

Решение ошибок сборки

При сборке пакетов иногда происходят ошибки. В данном разделе будет описано решение наиболее распространенных ошибок.

Стадии, на которых может произойти ошибка

Ошибка может произойти на любой стадии, однако чаще всего это случается после ввода 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 referance to ...

Данная ошибка вызвана тем что необходимая библиотека не была подключена.

Решение

Попытайтесь определить, исходя из лога, какая библиотека была не подключена. Далее добавьте в переменную CFLAGS параметр -lsomelib (не надо указывать название файла библиотеки), например -lcurses

Ошибки configure

Обычно они происходят из за отсутствия зависимостей или их неработоспособности.