7

I'm trying to cross-compile openSSH for ARMs but it seems that i'm unsuccessful:

Here're my configure parameters:

./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 ***

Could anyone advise why although zlib.h is present but unable to compile?

2 Answers 2

4

I solved this problem by installing zlib development files:

# Debian-based
sudo apt install libz-dev

# Fedora-based
sudo dnf install zlib-devel

This is related to the last error you've got:

configure: error: *** zlib.h missing - please install first or check config.log ***

The warnings you've got would get solved by this also. However, if you have it installed, maybe try reinstalling or updating it.

  • Bonus: One way to find required development shared libraries on your system is to ask your package manager what package provides a specific file. For example, dnf provides on Fedora could help you in these situations:

    $ 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
    
    ...
    

Found the solution thanks to this answer.

2

Probably configure has found a zlib.h for you host arch (/usr/include/zlib.h) and this is not usable for your target arch. See config.log for more details.

You need to build zlib using using the same cross compiler (configure --host=arm CC=arm-hisiv400-linux-g++). Or maybe your distribution provides a zlib devel package matching to your cross compiler.

In case you have zlib already installed to another prefix path you may need to tell configure about that, e.g.

./configure CFLAGS=-I/path/to/include LDFLAGS=-L/path/to/lib ...

or

./configure PKG_CONFIG_PATH=/path/to/lib/pkgconfig ...

6
  • actually I did use the same CC to build the sources. somehow when building openSSH it can't find the zlib. Btw, where may I find config.log file? Commented Oct 11, 2016 at 9:04
  • config.log should be in the build directory where you run ./configure. I've updated my answer regarding custom include paths. Commented Oct 11, 2016 at 9:24
  • btw, how do we verify if zlib is usable / suitable for my target arch? Commented Oct 11, 2016 at 9:57
  • @emddev just compile a minimal test file bla.c which has #include "zlib.h". gcc -c bla.c -o bla.o. The compiler will give you error or success. That's basically the same what configure` is doing. The config.log should show you the test code and gcc command verbosely. Commented Oct 11, 2016 at 10:07
  • thanks for the guidance, I think it's because zlib.h wasn't configured properly for my target arch. When I re-build zlib again and then rebuild openssh again, I was able to build openssh but new problems surfaced when I try to make Commented Oct 12, 2016 at 3:06

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.