当前位置:   article > 正文

linux学习记录:记一次手动编译安装组件的过程_fatal error: expat.h: no such file or directory

fatal error: expat.h: no such file or directory

linux学习记录:记一次手动编译安装组件的过程
  本次安装的组件为 Apache HTTP Server,本篇笔记中记录了全部过程,以供参考。
  apache组件的依赖项比较多,所以安装起来会繁杂一点,不过流程都是大同小异。本次升级中采用的是源码手动编译升级的方法,原因是遇到过没有rpm的系统…所以还是自己操作更踏实点。


零、安装目录总结

  linux下常见的有三个和库有关系的目录,分别是/lib/usr/lib/usr/local/lib。其中usr并不是user的缩写,而是unix system resource的缩写,即系统资料。

  那么这三个目录有何区别?简单来说,/lib是内核级的, /usr/lib是系统级的, /usr/local/lib是用户级的。其中/lib中包含的基本上都是/bin/sbin中程序所使用的库,而另外两个其中就存放了很多用于用户程序的库。

  这次安装的Apache HTTP Server,是用来构建web服务器的,所以很明显是用户级的。由此相关组件我均安装至/usr/local/lib下。

一、安装依赖项

  Apache HTTP Server主要是有三个依赖项aprapr-utilpcre,所以需要先行安装。下面会记录安装的过程。

1. apr

下载并解压apr库,这里选择的版本是1.7.0

$ wget http://archive.apache.org/dist/apr/apr-1.7.0.tar.gz
$ tar -zxf apr-1.7.0.tar.gz
  • 1
  • 2

进入目录并使用configure配置makefile,这里选择的目标路径为/usr/local/lib/apr

$ cd apr-1.7.0/
$ ./configure --prefix=/usr/local/lib/apr
  • 1
  • 2

编译

$ make
  • 1

安装

$ make install
  • 1

进入/usr/local/lib即可查看到apr目录

$ cd /usr/local/lib
$ ll | grep apr
  • 1
  • 2

2. apr-util

下载并解压apr-util库,这里选择的版本是1.6.1

$ wget http://archive.apache.org/dist/apr/apr-util-1.6.1.tar.gz
$ tar -zxf apr-util-1.6.1.tar.gz
  • 1
  • 2

进入目录并使用configure配置makefile,选择目标路径为/usr/local/lib/apr-util,并配置apr路径为/usr/local/lib/apr

$ cd apr-util-1.6.1/
$ ./configure --prefix=/usr/local/lib/apr-util --with-apr=/usr/local/lib/apr
  • 1
  • 2

编译

$ make
  • 1

此时出现报错如下,提示确实头文件expat.h,经查询原因为缺少expat库

xml/apr_xml.c:35:10: fatal error: expat.h: No such file or directory
 #include <expat.h>
          ^~~~~~~~~
  • 1
  • 2
  • 3

安装expat库 (下载地址为 https://github.com/libexpat/libexpat/releases )

$ tar -zxf expat-2.4.1.tar.gz
$ cd expat-2.4.1/
$ ./configure
$ make
$ make install
  • 1
  • 2
  • 3
  • 4
  • 5

再次编译 apr-util

$ make
  • 1

安装

$ make install
  • 1

进入/usr/local/lib即可查看到apr-util目录

$ cd /usr/local/lib
$ ll | grep apr-util
  • 1
  • 2

3. pcre

下载并解压pcre库,这里选择的版本是1.7.0

$ wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gz
$ tar -zxf pcre-8.45.tar.gz
  • 1
  • 2

进入目录并使用configure配置makefile,这里选择的目标路径为/usr/local/lib/pcre

$ cd pcre-8.45/
$ ./configure --prefix=/usr/local/lib/pcre
  • 1
  • 2

编译

$ make
  • 1

安装

$ make install
  • 1

进入/usr/local/lib即可查看到pcre目录

$ cd /usr/local/lib
$ ll | grep pcre
  • 1
  • 2


自此,所有的依赖项就安装完成了。

二、安装Apache HTTP Server

下载并解压apache组件,这里选择的版本是2.4.9

$ wget https://mirrors.bfsu.edu.cn/apache//httpd/httpd-2.4.49.tar.gz
$ tar -zxf httpd-2.4.49.tar.gz
  • 1
  • 2

进入目录并使用configure配置makefile,这里选择的目标路径为/usr/local/apache,并指定前面安装的三个依赖项的路径

$ cd httpd-2.4.49/
$ ./configure --with-included-apr --prefix=/usr/local/apache --with-apr=/usr/local/lib/apr --with-apr-util=/usr/local/lib/apr-util --with-pcre=/usr/local/lib/pcre
  • 1
  • 2

此时出现报错如下,原因是需要将apr和apr-util的目录放到./srclib/下
configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/.
注:./srclib/下apr和apr-util文件夹需要去掉版本号!

$ cp -r apr-1.7.0 httpd-2.4.49/srclib/
$ mv httpd-2.4.49/srclib/apr-1.7.0/ httpd-2.4.49/srclib/apr/
$ cp -r apr-util-1.6.1 httpd-2.4.49/srclib/
$ mv httpd-2.4.49/srclib/apr-util-1.6.1/ httpd-2.4.49/srclib/apr-util/
  • 1
  • 2
  • 3
  • 4

再次生成makefile

$ cd httpd-2.4.49/
$ ./configure --with-included-apr --prefix=/usr/local/apache --with-apr=/usr/local/lib/apr --with-apr-util=/usr/local/lib/apr-util --with-pcre=/usr/local/lib/pcre
  • 1
  • 2

编译

$ make
  • 1

安装

$ make install
  • 1

进入/usr/local/即可查看到apache目录

$ cd /usr/local/
$ ll | grep apache
  • 1
  • 2

由此Apache HTTP Server组件安装完成!执行如下命令可以确认

$ ./apache/bin/httpd -v
Server version: Apache/2.4.49 (Unix)
Server built:   Sep 20 2021 23:23:29
  • 1
  • 2
  • 3

三、总结

  可以看到手动编译安装组件虽然麻烦点,但是主要是麻烦在找依赖项上。安装的过程其实都是大同小异。基本都是如下三部曲:

  1. configure 检查编译环境;
  2. make 对源代码进行编译;
  3. make insall 将生成的可执行文件安装到当前计算机中

  可以发现configure的很多参数也是高度相似的,我感觉其中需要重点注意的是目标路径--prefix。在不了解可选参数时,也可以通过./configure -h来查看,总而言之虽然繁杂一点,但是其实是不难的。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号