前言
本文专注于在 Rocky Linux 9 / CentOS Stream 9 操作系统上通过源代码编译安装 libjpeg-turbo。
Libjpeg-turbo 是一种 JPEG 格式图像的编解码器。
安装它是为了以后安装 LibWebP 和 LibGD 提供较新版本的动态库,从而在一定程度上增强功能和使用程序更少 Bug以及更健壮。
Libjpeg-turbo 的优势
- Libjpeg-turbo 比传统的 libjpeg 在压缩和解压上的速度快上近两倍。
- Libjpeg-turbo 既实现了传统的 libjpeg API,也实现了功能较弱但更简单的 TurboJPEG API。
- Libjpeg-turbo 还具有色彩空间扩展。
- 几乎常见的指令集支持,无论是 ARM、x86、x86-64 都具可用性。
运行在以上指令集的平台,它的速度是 libjpeg 的 2 到 6 倍。
它还支持市场上几乎所有常用操作系统平台,它为32位和64位的流行 Linux 发行版、Windows、OSX,以及 iOS 提供二进制支持。
- 它提供了与商业/闭源加速 JPEG 编解码器类似的性能。
以上资料提供者:
安装依赖
dnf install -y gcc wget cmake autoconf automake libtool fontconfig
确定版本并获取源代码
如果因为网络问题不能下载源码包,那么请参考本站的其他文章: 如何在境内加速 GitHub 资源的下载以及克隆。
# https://github.com/libjpeg-turbo/libjpeg-turbo/releases
# LIBJPEG_VER="3.0.4"
export LIBJPEG_VER="3.1.0"
cat>/tmp/installer.sh<<EOF
cd /tmp
if [ ! -f libjpeg-turbo-\${LIBJPEG_VER}.tar.gz ]; then
echo "+++++++++++++++++++++++++++++++++下载 libjpeg-turbo 源代码:"
URL="https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/\${LIBJPEG_VER}/libjpeg-turbo-\${LIBJPEG_VER}.tar.gz"
wget --continue "\${URL}"
code=\$?
count=1
MAX_CNT=10
while [ \$code -gt 0 ]; do
if [ \$count -eq \$MAX_CNT ]; then
break
fi
count=\$((\$count + 1))
echo "+++++++++++++++++++++++++++++++++下载失败!重新下载 libjpeg-turbo 源码:"
sleep 1
wget --continue "\${URL}"
code=\$?
done
if [ \$code -gt 0 ]; then
echo "+++++++++++++++++++++++++++++++++libjpeg-turbo 源码包下载失败!"
exit
fi
echo "+++++++++++++++++++++++++++++++++LibJpeg-turbo 源码包下载成功!"
fi
EOF
bash /tmp/installer.sh
给源码压缩包解压缩
cat>/tmp/installer.sh<<EOF
cd /tmp
if [ -d libjpeg-turbo-\${LIBJPEG_VER} ]; then
rm -rf libjpeg-turbo-\${LIBJPEG_VER}
fi
echo "+++++++++++++++++++++++++++++++++解压缩 libjpeg-turbo 源码包:"
tar zxf libjpeg-turbo-\${LIBJPEG_VER}.tar.gz
if [ ! -d "libjpeg-turbo-\${LIBJPEG_VER}" ]; then
echo "+++++++++++++++++++++++++++++++++解压缩文件 libjpeg-turbo-\${LIBJPEG_VER}.tar.gz 失败!"
exit
fi
EOF
bash /tmp/installer.sh
进入解压后得到的目录并进行编译
cat>/tmp/installer.sh<<EOF
echo "+++++++++++++++++++++++++++++++++进入目录 libjpeg-turbo-\${LIBJPEG_VER}"
cd /tmp
cd libjpeg-turbo-\${LIBJPEG_VER}
mkdir build && cd build
echo "+++++++++++++++++++++++++++++++++开始 cmake:"
cmake ..
if [ \$? -gt 0 ]; then
echo "+++++++++++++++++++++++++++++++++LibJpeg-turbo cmake 失败!"
exit
fi
echo "+++++++++++++++++++++++++++++++++开始编译 libjpeg-turbo"
make
if [ \$? -gt 0 ]; then
echo "+++++++++++++++++++++++++++++++++LibJpeg-turbo 编译失败!"
exit
fi
echo "+++++++++++++++++++++++++++++++++执行安装 libjpeg-turbo"
make install
if [ $? -eq 0 ]; then
echo "+++++++++++++++++++++++++++++++++成功安装 libjpeg-turbo!"
else
echo "+++++++++++++++++++++++++++++++++libjpeg-turbo 安装失败!"
exit
fi
# libjpeg-turbo 将安装到 /opt/libjpeg-turbo
EOF
bash /tmp/installer.sh
进行动态库文件的链接操作
cat>/tmp/installer.sh<<EOF
if [ -d "/opt/libjpeg-turbo" ]; then
ln -sf /opt/libjpeg-turbo/lib64/lib*.so* /usr/lib64/
ln -sf /opt/libjpeg-turbo/lib64/lib*.so* /usr/lib/
ln -sf /opt/libjpeg-turbo/lib64/lib*.so* /usr/local/lib64/
ln -sf /opt/libjpeg-turbo/lib64/lib*.so* /usr/local/lib/
echo "export PATH=\"\\\${PATH}:/opt/libjpeg-turbo/bin\"" >>/etc/profile
echo "export LD_LIBRARY_PATH=\"/opt/libjpeg-turbo/lib64:\\\${LD_LIBRARY_PATH}\"" >>/etc/profile
ln -sf /opt/libjpeg-turbo/include/* /usr/include/
source /etc/profile
echo "+++++++++++++++++++++++++++++++++LibJPEG 安装完毕!"
echo "+++++++++++++++++++++++++++++++++移除 LibJPEG 源代码:"
rm -rfv /tmp/libjpeg-turbo-\${LIBJPEG_VER}*
else
echo "+++++++++++++++++++++++++++++++++LibJpeg 编译安装失败!"
exit
fi
echo "+++++++++++++++++++++++++++++++++LibJpeg-turbo 编译安装成功!"
ldconfig -v | grep jpeg
EOF
bash /tmp/installer.sh
校验动态库版本
readelf -d /opt/libjpeg-turbo/lib64/libjpeg.so
readelf -d /usr/local/lib64/libjpeg.so
如果出来的结果类似于以下,则表示 libjpeg-turbo 安装成功:
[root@rockylinux-9 build]# readelf -d /usr/local/lib64/libjpeg.so
Dynamic section at offset 0xb0c58 contains 28 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000e (SONAME) Library soname: [libjpeg.so.62]
0x000000000000000f (RPATH) Library rpath: [/opt/libjpeg-turbo/lib64]
...
后记
这里做个总结:
本文实现了一个完整的手把手地在 Rocky Linux 9 下通过源码编译安装最新版本 libjpeg-turbo 的过程。
而且还简要地说明了 libjpeg-turbo 的各种优势,并且在部分特性上与 libjpeg 进行比较。
实现相近的功能,并且还具有出色的性能和平台兼容性。
经测试,本文的内容在 CentOS Stream 9 下也可以正确运行!
鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。
本文章可以转载,但是需要说明来源出处!
本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com