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

61 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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