问题:
在上传图片的时候报错:failed to encode image to WebP: exit status 1. .bin/webp/cwebp: /lib64/libm.so.6: version `GLIBC_2.29' not found (required by .bin/webp/cwebp)
原因
报错信息显示是 cwebp 工具需要的共享库(libm.so.6)版本不满足要求,这通常是因为你的 CentOS 7 系统默认的 glibc 版本较低,而 cwebp 工具依赖较新的 glibc 版本(至少 2.29)。而我的项目是goframe项目,使用了 go-webpbin 库,虽然在打包的时候使用了交叉编译,但 go-webpbin 运行时会调用本地的 cwebp,仍然受限于运行环境的 glibc 版本。
解决方法
1. 升级你的 glibc。 检查当前 glibc 版本:
ldd --version
如果显示 glibc 2.17 或更低,需要手动升级。
注意⚠️:在升级glibc前,请务必备份系统数据和文件,因为可能会导致系统崩溃,谨慎!!!
2. 升级 glibc 至 2.29 或更高版本:
这里升级到 v2.31,按顺序执行以下命令:
wget https://mirrors.aliyun.com/gnu/glibc/glibc-2.31.tar.gz
tar -xvzf glibc-2.31.tar.gz
cd glibc-2.31
mkdir build
cd build
unset LD_LIBRARY_PATH && ../configure --prefix=/usr
--disable-profile --enable-add-ons --with-headers=/usr/include
--with-binutils=/usr/bin --disable-sanity-checks --disable-werror
make -j6
sudo make install
make localedata/install-locales
如果执行到 unset LD_LIBRARY_PATH && ../configure ...... 时候报错:
configure: error:
*** These critical programs are missing or too old: compiler xxxxx
*** Check the INSTALL file for required versions.
到 glibc-2.29 根目录执行命令:cat INSTALL | grep -E "newer|later" 查看所需工具链版本,需要确保工具链满足以下版本要求:(如需升级请自行 Google 或 百度)
工具名称 | 所需版本 | 版本查看命令 |
---|---|---|
make | >= 4.0 | make -v |
bison | >= 2.7 | yum info bison |
python | >= 3.4 | python --version |
gcc | >= 5.0 | gcc -v |
binutils | >= 2.25 | yum info binutils |
texinfo | >= 4.7 | yum info texinfo |
sed | >= 3.02 | sed --version |
gdb | >= 7.8 | gdb --versiont |
gettext | >= 0.10.36 | yum info gettext |
所有工具链升级完后重新构建
unset LD_LIBRARY_PATH && ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --disable-sanity-checks --disable-werror
构建编译过程:
3. 验证新版
ldd --version