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 编译器,本文以 GCC(GNU Compiler Collection)为例,当然你也可以使用你所喜欢的其它 C 编译器。
另外还需要安装两款自动化构建工具 CMake 和 Make。前者的作用是生成项目构建系统(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 =offENABLE_MBEDTLS =off | 禁用被自动检测到的其它 AES 实现 |
命令执行后,如果进度达到 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
如果你在操作的过程中遇到了任何问题,可留言提出。