我正在尝试为 ARM 交叉编译 openSSH,但似乎没有成功:
这是我的配置参数:
./configure --host=arm CC=arm-hisiv400-linux-g++ --prefix=/home/aa/Hi3536_SDK_V2.0.4.0/openSSH --with-zlib=/usr/include
checking zlib.h presence... yes
configure: WARNING: zlib.h: present but cannot be compiled
configure: WARNING: zlib.h: check for missing prerequisite headers?
configure: WARNING: zlib.h: see the Autoconf documentation
configure: WARNING: zlib.h: section "Present But Cannot Be Compiled"
configure: WARNING: zlib.h: proceeding with the compiler's result
configure: WARNING: ## ------------------------------------------- ##
configure: WARNING: ## Report this to [email protected] ##
configure: WARNING: ## ------------------------------------------- ##
checking for zlib.h... no
configure: error: *** zlib.h missing - please install first or check config.log ***
谁能告诉我为什么虽然 zlib.h 存在但无法编译?
答案1
我通过安装 zlib 开发文件解决了这个问题:
# Debian-based
sudo apt install libz-dev
# Fedora-based
sudo dnf install zlib-devel
这与您遇到的最后一个错误有关:
configure: error: *** zlib.h missing - please install first or check config.log ***
您收到的警告也可以通过此解决。但是,如果您已安装它,则可以尝试重新安装或更新它。
奖金:在系统上查找所需的开发共享库的一种方法是询问包管理器哪个包提供了特定文件。例如,
dnf provides
Fedora 可以在以下情况下为您提供帮助:$ sudo dnf provides /usr/include/zlib.h ... zlib-devel-1.2.11-30.fc35.x86_64 : Header files and libraries for Zlib development Repo : @System Matched from: Filename : /usr/include/zlib.h ...
找到了解决方案感谢这个答案。
答案2
可能configure
已经为您的主机 arch (/usr/include/zlib.h) 找到了 zlib.h,但这对您的目标 arch 不可用。有关更多详细信息,请参阅 config.log。
您需要使用相同的交叉编译器 ( configure --host=arm CC=arm-hisiv400-linux-g++
) 来构建 zlib。或者您的发行版可能提供了与您的交叉编译器匹配的 zlib devel 包。
如果您已将 zlib 安装到另一个前缀路径,您可能需要告诉配置这一点,例如
./configure CFLAGS=-I/path/to/include LDFLAGS=-L/path/to/lib ...
或者
./configure PKG_CONFIG_PATH=/path/to/lib/pkgconfig ...