mirror of
https://github.com/Linux4Yourself/book.git
synced 2025-01-24 23:32:18 +08:00
61 lines
4.0 KiB
Markdown
61 lines
4.0 KiB
Markdown
|
# Решение ошибок сборки
|
|||
|
|
|||
|
При сборке пакетов иногда происходят ошибки.
|
|||
|
В данном разделе будет описано решение наиболее распространенных ошибок.
|
|||
|
|
|||
|
## Стадии, на которых может произойти ошибка
|
|||
|
|
|||
|
Ошибка может произойти на любой стадии, однако чаще всего это случается после ввода 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
|
|||
|
|
|||
|
Обычно они происходят из за отсутствия зависимостей или их неработоспособности.
|