Apache Httpd Build from source: fatal error: expat.h: No such file or directory

29,018

Solution 1

Download expat-2.2.6.tar.bz2 from https://libexpat.github.io/.

Extract expat using following command

tar xvjf expat-2.2.6.tar.bz2 -C /path-to-dir

Change to the extracted expat directory.

Build expat using following commands

  1. ./configure --prefix=/path-to-expat-installation-dir

  2. make

  3. make install

While building Apache Httpd from source specify --with-expat

./configure --with-included-apr --prefix=/path-to-apache-installation --with-expat=/path-to-expat-installation-dir

Solution 2

Do you have the expat library installed? (Because that's where the expat.h comes from.)

If you cannot install it globally to the system, I'm sure Apache's ./configure script must have an option to support a custom location for the library as well.

Solution 3

For anyone else coming across this:

OP had to do this because they didn't have sudo access. If you do, usually you don't need to download the source of expat manually; installing via package manager is way easier. Unless the software you are compiling requires a newer version of expat than your RPM repos provide.

So for the RHEL family of OSes you can just do sudo <dnf|yum> install expat expat-devel, then proceed with what you were compiling.

Share:
29,018

Related videos on Youtube

Amit Dube
Author by

Amit Dube

Seasoned Technical Professional offering 14+ years of rich and versatile experience in Software design, architecture, and development. A result-oriented, forward-thinking, and committed individual with a passion for technology.

Updated on July 09, 2022

Comments

  • Amit Dube
    Amit Dube almost 2 years

    I am trying to build Apache Server v 2.4.38 on RHEL 7.3 and I am using apr 1.6.5, apr-util 1.6.1, and pcre 8.42.

    I am running following commands

    ./configure  --with-included-apr --with-pcre=/data/abc/installed/pcre_installed --prefix=/data/abc/installed/httpd_installed  
    
    make
    

    While running 'make' I am receiving error

    /bin/sh /data/abc/installed/httpd-2.4.38/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H  -DLINUX -D_REENTRANT -D_GNU_SOURCE   -I/data/abc/installed/httpd-2.4.38/srclib/apr-util/include -I/data/abc/installed/httpd-2.4.38/srclib/apr-util/include/private  -I/data/abc/installed/httpd-2.4.38/srclib/apr/include    -o xml/apr_xml.lo -c xml/apr_xml.c && touch xml/apr_xml.lo
    xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory
     #include <expat.h>
    
    • Amit Dube
      Amit Dube over 5 years
      I cannot do 'yum install expat-devel' because it needs sudo access.
    • cnst
      cnst over 5 years
      Why are you building Apache from source if you don't have root access?!
    • Amit Dube
      Amit Dube over 5 years
      I want to start httpd server in my machine. Is it possible to install Apache Httpd with rpm package without having root access?
    • cnst
      cnst over 5 years
      You cannot make it listen on port 80 unless you have root access, so, you'd only be able to make it work on a port like 8080 (usually, ports below 1024 are reserved).
  • Amit Dube
    Amit Dube over 5 years
    Is there a parameter to specify expat library path in ./configure?
  • cnst
    cnst over 5 years
    Try ./configure --help | fgrep expat?!
  • Jesferman
    Jesferman almost 2 years
    And for Debian/Ubuntu family: apt install libexpat1-dev