Вопрос или проблема
Когда я запустил ./configure
в dropbear, он сообщает, что отсутствует zlib; однако я уже добавил префикс, т.е. --prefix
, чтобы указать правильный каталог для zlib, но проблема все еще сохраняется.
Я пытаюсь собрать файлы в dropbear, выполнив
#!/bin/bash
./configure --prefix=$HOME/Hi3536_SDK_V2.0.4.0/dropbear \
--with-zlib=$HOME/Hi3536_SDK_V2.0.4.0/zlib/include \
--host=arm CC=arm-hisiv400-linux-gcc
но, похоже, он не может найти путь к zlib.
Опция конфигурации --prefix
используется для указания скрипту конфигурации (и полученным Makefile), где разместить программы, которые будут установлены. Она не указывает, где получить заголовочные файлы и библиотеки.
Чтобы указать скрипту конфигурации, где получить файлы, вам нужно будет настроить следующие переменные:
- CPPFLAGS (для каталогов, содержащих заголовочные файлы)
- LDFLAGS (для каталогов, содержащих библиотеки)
- LIBS (для фактических имен библиотек)
Вы можете передать эти значения в командной строке для конфигурации, например,
myheader=$HOME/junk/include
mylibs=$HOME/junk/lib
./configure CPPFLAGS="-I$myheader" LDFLAGS="-L$mylibs"
Продолжая разъяснение (которое должно было быть включено в вопрос)
Когда я пытаюсь собрать файлы в dropbear, выполняя
#!/bin/bash
./configure --prefix=$HOME/Hi3536_SDK_V2.0.4.0/dropbear --with-zlib=$HOME/Hi3536_SDK_V2.0.4.0/zlib/include --host=arm CC=arm-hisiv400-linux-gccно, похоже, он не может найти путь к zlib
Вы можете увидеть проблему, взглянув на исходный код скрипта конфигурации:
# Проверьте, нужен ли zlib
AC_ARG_WITH(zlib,
[ --with-zlib=PATH Использовать zlib в PATH],
[
# опция задана
if test -d "$withval/lib"; then
LDFLAGS="-L${withval}/lib ${LDFLAGS}"
else
LDFLAGS="-L${withval} ${LDFLAGS}"
fi
if test -d "$withval/include"; then
CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
else
CPPFLAGS="-I${withval} ${CPPFLAGS}"
fi
]
)
Это означает, что он ожидает, что значение опции будет путем к каталогу, который содержит как подкаталоги include
, так и lib
(или каталог, содержащий файлы, которые ожидаются в этих подкаталогах). Комментарий показывает, что заданное значение было путем к подкаталогу include
. Следующий компиляционно/линковочный тест завершится неудачей:
AC_CHECK_LIB(z, deflate, , AC_MSG_ERROR([*** zlib отсутствует - установите сначала или проверьте config.log ***]))
Вероятное решение: измените эту опцию на
--with-zlib=$HOME/Hi3536_SDK_V2.0.4.0/zlib
Проверьте файл config.log
. Вероятно, вы найдете повторяющиеся сообщения об ошибках о -Wno-pointer-sign
.
То, что происходит, не то, что configure
не может найти zlib, а то, что configure
ожидает более новую версию GCC, чем та, которую вы используете, и GCC выдает ошибку на нераспознанный параметр командной строки. Все тесты завершаются неудачей, просто тест для zlib – это первый, где неудача является фатальной.
Чтобы исправить это, отредактируйте скрипт configure
, удалив -Wno-pointer-sign
из параметров CFLAGS (для меня это было на строке 3135).
Ответ или решение
При конфигурации Dropbear вы столкнулись с ошибкой, касающейся отсутствия библиотеки zlib. Давайте разберемся с этой проблемой подробнее и предложим решения.
Причина проблемы
Ошибка, связанная с отсутствием zlib, может возникнуть из-за неправильного указания пути к библиотеке при выполнении команды ./configure
. Ваша текущая команда выглядит следующим образом:
./configure --prefix=$HOME/Hi3536_SDK_V2.0.4.0/dropbear \
--with-zlib=$HOME/Hi3536_SDK_V2.0.4.0/zlib/include \
--host=arm CC=arm-hisiv400-linux-gcc
Здесь вы указали, что zlib находится по пути к папке include
, однако скрипт конфигурации ожидает путь к каталогу, который содержит как заголовочные файлы, так и библиотечные файлы.
Рекомендации по исправлению
-
Укажите корректный путь к zlib:
Вам необходимо изменить опцию--with-zlib
, указав путь к корневому каталогу zlib, а не к подкаталогуinclude
. Попробуйте выполнить следующую команду:./configure --prefix=$HOME/Hi3536_SDK_V2.0.4.0/dropbear \ --with-zlib=$HOME/Hi3536_SDK_V2.0.4.0/zlib \ --host=arm CC=arm-hisiv400-linux-gcc
-
Дополнительные параметры конфигурации:
Возможно, вам потребуется дополнительно указать флагиCPPFLAGS
иLDFLAGS
, чтобы правильно указать путь к заголовочным и библиотечным файлам zlib. Если ваши файлы находятся в стандартных каталогах, это может не потребоваться. Но для уверенности выполните следующую команду:./configure --prefix=$HOME/Hi3536_SDK_V2.0.4.0/dropbear \ CPPFLAGS="-I$HOME/Hi3536_SDK_V2.0.4.0/zlib/include" \ LDFLAGS="-L$HOME/Hi3536_SDK_V2.0.4.0/zlib/lib" \ --host=arm CC=arm-hisiv400-linux-gcc
-
Проверьте конфигурационный файл:
Если предыдущие шаги не помогли, не забудьте проверить файлconfig.log
в каталоге, где вы выполняете конфигурацию. Найдите в нем сообщения об ошибках, которые могут указывать на неправильные пути или нехватку файлов.
Версии компилятора
Если вы видите сообщения об ошибке, связанные с опцией -Wno-pointer-sign
, это может указывать на то, что скрипт конфигурации ожидает более новую версию компилятора GCC, чем та, что у вас установлена. Чтобы решить эту проблему:
- Откройте файл
configure
и измените (или удалите) опцию-Wno-pointer-sign
из параметровCFLAGS
. Найдите строку, содержащую эту опцию (это может быть на строчке 3135 или другой) и удалите её.
Заключение
Следуя вышеуказанным рекомендациям, вы сможете успешно настроить и скомпилировать Dropbear с поддержкой zlib. Если возникнут дополнительные вопросы или сложности, не стесняйтесь обращаться за помощью.