當我運行./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 的路徑。
答案1
配置選項--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 的路徑
你可以透過查看原始碼來發現問題配置腳本:
# Check if zlib is needed
AC_ARG_WITH(zlib,
[ --with-zlib=PATH Use zlib in PATH],
[
# option is given
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 missing - install first or check config.log ***]))
可能的解決方法:將該選項變更為
--with-zlib=$HOME/Hi3536_SDK_V2.0.4.0/zlib
答案2
檢查config.log
文件。您很可能會發現有關 的重複錯誤訊息-Wno-pointer-sign
。
發生的情況並不是configure
找不到 zlib,而是需要configure
比您正在使用的 GCC 版本更新的版本,並且 GCC 在無法識別的命令列選項上出錯。 全部測試失敗了,只是 zlib 的測試是第一個失敗是致命的。
要解決此問題,請編輯configure
腳本以從 CFLAGS 參數中刪除-Wno-pointer-sign
(對我來說,它位於第 3135 行)。