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