如何在 CentOS 上编译安装最新版 libzip


libzip 是一个用来读取、创建及修改 Zip 文件的 C 函数库,被其它很多软件项目所依赖,比如 Chromium、MySQL Workbench、PHP 的 Zip 扩展等。

如果你在 CentOS 上编译安装的软件依赖 libzip,但通过 Yum 或 DNF 包管理器安装的版本却不满足要求,即可按照本文提供的最佳实践编译安装最新版 libzip。

本文以 libzip 当前最新版本 1.8.0 为例,详细介绍了如何在 CentOS 上通过编译源代码的方式安装 libzip。本文提供的安装步骤在 CentOS 7、CentOS 8 以及 CentOS Stream 8 中均实际测试过,对于在编译过程中可能遇到的问题也做了详细说明。

本文假设你登录的账户已取得管理员账户(root)权限,因为文中出现的命令大部分都需要用到 root 账户权限。如果你登录的是普通账户,可运行 sudo -s 命令切换到带有 root 权限的 Shell,否则需要在每条命令前添加 sudo 命令。

本文在用到包管理器时,会统一使用 yum 命令,但是要知道在 CenOS 8、CentOS Stream 8 及更新版本的 CentOS 中,yum 命令已被 dnf 命令替代(以符号链接的形式存在),运行 yum 命令实际上是运行 dnf 命令。

一、编译环境

libzip 主要是用 C 语言编写的,因此编译 libzip 需要确保 CentOS 系统中安装了 C 编译器,本文以 GCCGNU Compiler Collection)为例,当然你也可以使用你所喜欢的其它 C 编译器。

另外还需要安装两款自动化构建工具 CMakeMake。前者的作用是生成项目构建系统(Buildsystem),里面包含 Makefile 文件(待执行的一组任务规则,告诉 make 如何编译和链接程序)。后者的作用是根据配置好的 Makefile 文件自动将源代码构建成可执行程序和库。

运行以下命令为 CentOS 系统安装 GCC 及 make 程序:

yum install gcc make

编译 libzip 要求 CMake 的最低版本为 3.0.2。对于 CentOS 8 或 CentOS Stream 8 来说,可以直接运行以下命令完成安装:

yum install -y cmake

而对于 CentOS 7 来说,通过包管理器 Yum 安装的 CMake 版本过低,需要手动安装更新的版本,具体步骤可参考下面这篇文章:

不论通过何种方式安装 CMake,都需要确保运行以下命令后,能够正常显示 CMake 的版本号,且版本号不低于 3.0.2

cmake --version

二、下载源码

从 libzip 官方下载页面获取最新版源代码压缩包的下载链接:

libzip 官方下载下面:https://libzip.org/download/

libzip 提供了两种类型的压缩包格式,XZ(扩展名为 .xz)和 Gzip(扩展名为 .gz),可根据自己的需要选择,本文以 XZ 格式为例。

切换到系统的源代码存放目录,将 libzip 的源代码压缩包下载下来:

cd /usr/local/src
curl -LO https://libzip.org/download/libzip-1.8.0.tar.xz

解压缩 libzip 源代码压缩包,并切换到源代码所在目录(注意,除非有说明,所有操作都会在该目录下进行,切勿离开):

tar -xvf libzip-1.8.0.tar.xz
cd libzip-1.8.0

三、开始编译

由于编译 libzip 需要依赖很多函数库(Library),所以需要在正式编译前准备好这些库。具体依赖哪些库可以查看源代码目录下的 INSTALL.md 文件,里面有详细说明。如果缺少某些库,在运行下面给出的 cmake 命令后会中断并给出提示。

为节省时间,你可以直接运行以下命令为操作系统安装所有依赖库:

yum install zlib-devel bzip2-devel xz-devel \
libzstd-devel openssl-devel 

注意,libzip 支持五种 AES(高级加密标准)实现,分别是 Apple’s CommonCrypto、GnuTLS、mbed TLS、OpenSSL 和 Microsoft Windows Cryptography Framework,但是只需要选择其中一种。本文示例选用的是 OpenSSL,所以安装了 openssl-devel。

接下来就可以运行下面这三条命令生成含有 Makefile 文件的项目构建系统:

mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/libzip \
-DENABLE_OPENSSL=on \
-DENABLE_GNUTLS=off \
-DENABLE_MBEDTLS=off

注意,这里使用了四个 CMake 选项配置 libzip,其用途如下表所示:

选项用途
CMAKE_INSTALL_PREFIX 指定 libzip 库安装位置
ENABLE_OPENSSL=on指定使用 OpenSSL 作为 AES 实现
ENABLE_GNUTLS=off
ENABLE_MBEDTLS=off
禁用被自动检测到的其它 AES 实现
配置 libzip 项目构建系统

命令执行后,如果进度达到 100% 且没有出现任何错误,即可运行以下命令正式开始编译:

make

待编译进度达到 100% 且没有任何错误,即可运行以下命令完成安装:

make install

至此,libzip 就成功编译安装完成了。

四、升级 libzip

如果想要升级到 libzip 今后发布的新版本,只需要按照以上步骤重新操作一遍即可。

五、总结

完成以上流程后,应该能够得到如下所示的这些可用文件或信息,有些可能会被其它软件用到。

libzip 的 pkg-config 配置文件目录:

/usr/local/libzip/lib64/pkgconfig

libzip 头文件目录:

/usr/local/libzip/includes

libzip 库文件目录:

/usr/local/libzip/lib64

如果你在操作的过程中遇到了任何问题,可留言提出。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注