前言
Libjpeg-turbo 是一种 JPEG 图像格式的编解码器,相比于 libjpeg,它具有明显的天然优势,比如前者的压缩和解压速度更快、跨平台兼容能力强等。
本文讲解的是如何在 Linux 下编译安装 Libjpeg-turbo,文章后面的脚本适用于 Rocky Linux/AlmaLinux 10/9 等操作系统。
由于往后编译 WebP 和 libgd 时为了获得更新的功能、性能和稳定性,因而采用当前最新版本的 libjpeg-turbo 代替 libjpeg,通过编译安装能得到最新的版本,故有了本文的产生。
执行了文章后面的自动化安装脚本,不仅可得到动态链接库,而且还有 JPEG 编码和解码的二进制程序。

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 编解码器类似的性能。
以上资料参阅:
https://sourceforge.net/projects/libjpeg-turbo/
具体步骤
- 步骤一:安装依赖
-
步骤二:确定版本并获取源代码
如果因为网络问题不能下载源码包,那么请参考本站的其他文章: 如何在境内加速 GitHub 资源的下载以及克隆。
- 步骤三:使用 CMake 配置、生成和构建安装过程
-
步骤四:进行编译和安装
-
步骤五:设置环境变量
对 Libjpeg-turbo 安装目录下的 bin/ 和 lib64/ 目录全路径分别添加进环境变量 PATH 和 LD_LIBRARY_PATH中。
-
步骤六:将 lib64/ 路径添加进动态链接库文件:
echo "/opt/libjpeg-turbo/lib64" >>/etc/ld.so.conf
- 步骤七:校验动态库版本
readelf -d /opt/libjpeg-turbo/lib64/libturbojpeg.so
如果出现类似于以下的执行结果,则表示 libjpeg-turbo 安装成功:
[root@localhost ~]# readelf -d /opt/libjpeg-turbo/lib64/libturbojpeg.so
Dynamic section at offset 0x101d80 contains 29 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x0000000000000001 (NEEDED) Shared library: [ld-linux-x86-64.so.2]
0x000000000000000e (SONAME) Library soname: [libturbojpeg.so.0]
0x000000000000000f (RPATH) Library rpath: [/opt/libjpeg-turbo/lib64]
0x000000000000000c (INIT) 0x4000
0x000000000000000d (FINI) 0xdb910
0x0000000000000019 (INIT_ARRAY) 0x102810
...
- 最后一步:验证二进制命令路径
[root@localhost ~]# source /etc/profile
[root@localhost ~]# which cjpeg
/opt/libjpeg-turbo/bin/cjpeg
编译安装 Libjpeg-turbo 的自动化脚本
cat>/tmp/installer.sh<<EOF
# 安装依赖
dnf install -y gcc wget cmake autoconf automake libtool fontconfig
LIBJPEG_VER="3.1.3"
MAX_CNT=10
LIBJPEG_SOURCE_DIR="libjpeg-turbo-\${LIBJPEG_VER}"
LIBJPEG_SOURCE_TAR_FILE="\$LIBJPEG_SOURCE_DIR.tar.gz"
cd /tmp
if [ ! -f ./\$LIBJPEG_SOURCE_TAR_FILE ]; then
echo "+++++++++++++++++++++++++++++++++下载 libjpeg-turbo 源码:"
# 有参数传入脚本,则使用代理访问 Github 上的文件
if [ -n "\${1}" ]; then
URL="https://ghfast.top/https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/\${LIBJPEG_VER}/\$LIBJPEG_SOURCE_TAR_FILE"
else
URL="https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/\${LIBJPEG_VER}/\$LIBJPEG_SOURCE_TAR_FILE"
fi
wget --continue "\${URL}"
code=\$?
count=1
while [ \$code -gt 0 ]; do
if [ \$count -eq \$MAX_CNT ]; then
break
fi
count=\$((\$count + 1))
echo "+++++++++++++++++++++++++++++++++再次尝试下载 libjpeg-turbo 源码:"
sleep 2
wget --continue "\${URL}"
code=\$?
done
if [ \$code -gt 0 ]; then
echo "+++++++++++++++++++++++++++++++++Libjpeg-turbo 源码包下载失败!"
exit
fi
echo "+++++++++++++++++++++++++++++++++源码包下载成功!"
fi
if [ -d \$LIBJPEG_SOURCE_DIR ]; then
rm -rf \$LIBJPEG_SOURCE_DIR
fi
echo "+++++++++++++++++++++++++++++++++对源码包解压缩:"
sleep 5
tar zxf \$LIBJPEG_SOURCE_TAR_FILE
if [ ! -d "\$LIBJPEG_SOURCE_DIR" ]; then
echo "+++++++++++++++++++++++++++++++++解压失败!"
exit
fi
echo "+++++++++++++++++++++++++++++++++进入编译目录 \$LIBJPEG_SOURCE_DIR"
cd \$LIBJPEG_SOURCE_DIR
# 构建安装过程
mkdir build && cd build
echo "+++++++++++++++++++++++++++++++++开始构建操作:"
cmake ..
if [ \$? -gt 0 ]; then
echo "+++++++++++++++++++++++++++++++++构建失败!"
exit
fi
echo "+++++++++++++++++++++++++++++++++开始编译:"
sleep 5
make
if [ \$? -gt 0 ]; then
echo "+++++++++++++++++++++++++++++++++编译失败!"
exit
fi
echo "+++++++++++++++++++++++++++++++++开始安装:"
sleep 5
make install
if [ -d "/opt/libjpeg-turbo" ]; then
echo "export PATH=\"\${PATH}:/opt/libjpeg-turbo/bin\"" >>/etc/profile
echo "export LD_LIBRARY_PATH=\"/opt/libjpeg-turbo/lib64:\${LD_LIBRARY_PATH}\"" >>/etc/profile
source /etc/profile
echo "/opt/libjpeg-turbo/lib64" >>/etc/ld.so.conf
echo "+++++++++++++++++++++++++++++++++安装成功!"
else
echo "+++++++++++++++++++++++++++++++++安装失败!"
sleep 5
exit
fi
echo "+++++++++++++++++++++++++++++++++安装完成!"
cd /tmp
if [ -d "\$LIBJPEG_SOURCE_DIR" ]; then
rm -rf \$LIBJPEG_SOURCE_DIR
rm -f \$LIBJPEG_SOURCE_TAR_FILE
fi
ldconfig -v | grep jpeg
EOF
执行上面的 Bash 脚本:
# 传入参数 1
bash /tmp/installer.sh 1
rm -f /tmp/installer.sh
后记
本文实现了完整的手把手地在 Rocky Linux 或 AlmaLinux 下通过源码编译安装最新版本 libjpeg-turbo 的过程。
而且还简要地说明了 libjpeg-turbo 的各种优势,并且在部分特性上与 libjpeg 进行比较。前者实现相近的功能,并且还具有出色的性能和平台兼容性。
若无意外,本文内容也兼容 RHEL 9 和 10。

鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。
本文章可以转载,但是需要说明来源出处!
本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com