BLFS General Libraries
icu
International Components for Unicode (ICU) 为C/C++库提供Unicode和全球化支持,是所有平台广泛移植和给予应用程序相同结果的依赖库。libxml2建议依赖,感觉有用
这个icu库大版本升级需要所有依赖库重新编译。
cd /sources
icu_VERSION=75_1
tar xf icu4c-${icu_VERSION}-src.tgz
cd icu/source
./configure --prefix=/usr
make
make install
libxml2
libxml2处理XML文件,目前看多个程序建议依赖,例如 nghttp2
cd /sources
libxml2_VERSION=2.13.3
tar xf libxml2-${libxml2_VERSION}.tar.xz
cd libxml2-${libxml2_VERSION}
patch -Np1 -i ../libxml2-${libxml2_VERSION}-upstream_fix-2.patch
./configure --prefix=/usr \
--sysconfdir=/etc \
--disable-static \
--with-history \
--with-icu \
PYTHON=/usr/bin/python3 \
--docdir=/usr/share/doc/libxml2-${libxml2_VERSION} &&
make
make install
rm -vf /usr/lib/libxml2.la &&
sed '/libs=/s/xml2.*/xml2"/' -i /usr/bin/xml2-config
LZO
LZO数据压缩类似于LZ4,不过LZ4速度更快,占用CPU少,所以 ZFS 中使用了LZ4
libarchive
处理压缩格式读写接口,CMake建议依赖,还是有不少软件会使用,所以安装
cd /sources
libarchive_VERSION=3.7.4
tar xf libarchive-${libarchive_VERSION}.tar.xz
cd libarchive-${libarchive_VERSION}
./configure --prefix=/usr --disable-static --without-expat &&
make
make install
libaio
异步I/O依赖库,例如 fio
这样的工具依赖
cd /sources
libaio_VERSION=0.3.113
tar xf libaio-${libaio_VERSION}.tar.gz
cd libaio-${libaio_VERSION}
# disable the installation of the static library
sed -i '/install.*libaio.a/s/^/#/' src/Makefile
make
make install
libuv
多平台支持库,专注于异步I/O,主要使用的程序有 Node.js (建议依赖),另外CMake也建议依赖,看起来安装较好,可以支持不少跨平台软件(跨平台软件可能不会直接使用aio)
cd /sources
libuv_VERSION=1.48.0
tar xf libuv-v${libuv_VERSION}.tar.gz
cd libuv-v${libuv_VERSION}
sh autogen.sh &&
./configure --prefix=/usr --disable-static &&
make
make install
libtasn1
libtasn1
是一个高度可移植C库,用于编码和解码符合ASN.1 schema的DER/BER数据。 由于 make-ca
(也就是 curl 所依赖的证书)需要 p11-kit
运行时,但需要该 p11-kit
运行时在 libtasn1
之后编译以从信任发布者那里生成证书存储。
cd /sources
libtasn1_VERSION=4.19.0
tar xf libtasn1-${libtasn1_VERSION}.tar.gz
cd libtasn1-${libtasn1_VERSION}
./configure --prefix=/usr --disable-static &&
make
make install
PCRE2
备注
GLib (建议)依赖PCRE2
PCRE2包含Perl兼容正则表达式库。这些库用于使用与Perl相同的语法和语义来实现正则表达式模式匹配。
cd /sources
pcre2_VERSION=10.44
tar xf pcre2-${pcre2_VERSION}.tar.bz2
cd pcre2-${pcre2_VERSION}
./configure --prefix=/usr \
--docdir=/usr/share/doc/pcre2-10.44 \
--enable-unicode \
--enable-jit \
--enable-pcre2-16 \
--enable-pcre2-32 \
--enable-pcre2grep-libz \
--enable-pcre2grep-libbz2 \
--enable-pcre2test-libreadline \
--disable-static &&
make
make install
strike:Libffi
备注
GLib 依赖Libffi,不过BLFS手册没有包含这个库编译安装,而是 GLib 源代码编译时会自动通过 git 下载源代码。 我为了降低Host主机的复杂度,目前没有安装git,而是从 libffi 官方网站下载包进行编译 由于Libffi跨平台有不同参数,我不确定支持 GLib 应该使用哪种,所以还是按照BLFS默认方法,先安装 git
,由 GLib 编译自动完成
有关 Libffi 的说明,这里参考官网Readme
高级语言的编译起会生成遵循特定约定的代码,这些约定对于单独编译的运行必不可少。其中一项约定就是"调用约定"(calling convention)。调用约定本质上是编译起对函数参数在函数入口处的位置所做的一组假设。调用约定还指定了函数返回值的位置。
某些程序在编译时可能不知道要将哪些参数传递给函数。例如,编译器可以在运行时被告知用于调用给定函数的参数的数量和类型。Libffi可用于此类程序,以提供从解释器程序到编译代码的桥梁。
Libffi库为各种调用约定提供了可移植的高级编程接口。这允许程序员在运行时调用由调用接口描述指定的任何函数。
FFI代表Foreign Function Interface(外部函数接口)。外部函数接口是允许一种语言编写的代码调用另一种语言编写的代码的接口的通俗名称。libffi库实际上仅提供全功能外部函数的最低、机器相关层。libffi之上必须存在一层来出来两种语言之间床底的值的类型转换。
GLib
备注
BLFS QEMU 依赖 Glib
Glib是底层提供处理C的数据结构的库,用于运行时功能的可移植性包装和接口,例如event loop, 线程,动态加载以及一个对象系统。
如果要支持GNOME,则还需要依赖安装 GObject Introspection。不过我不在服务器端使用gnoome,所以没有安装 gobject-introspection
。
依赖: BLFS Python模块
packaging
/docutils
建议:
pcre2
: 实际还是要安装,如果没有安装则编译过程会自动下载源代码,所以还是提前安装为好
cd /sources
glib_VERSION=2.80.4
tar xf glib-${glib_VERSION}.tar.xz
cd glib-${glib_VERSION}
patch -Np1 -i ../glib-skip_warnings-1.patch
mkdir build &&
cd build &&
# 执行之前需要确保系统中安装了git工具,因为有些代码是通过git安装的
meson setup .. \
--prefix=/usr \
--buildtype=release \
-D introspection=disabled \
-D man-pages=enabled &&
ninja
ninja install
git的SSL问题排查
Program 'rst2man rst2man.py' not found
ninja
编译报错:
rst2man
没有找到Program 'rst2man rst2man.py' not found
参考 Install rst2man failed for varnish agent [fix] ,在 Debian 中是通过 python-docutils
安装来获得 rst2man
这个Python文档模块。
所以,对应 BLFS Python模块 安装 docutils