利用DeepSeek部分解决从源码升级xz找不到正确版本liblzma.so动态库问题

从源码安装liblzma-5.0.4后,

unzip liblzma-master.zip

mv liblzma-master liblzma
cd liblzma
./configure
make
sudo make install

xz --version
xz (XZ Utils) 5.0.4
liblzma 5.0.4

xz --help
用法:xz [选项] ... [文件名] ...
压缩或解压缩 .xz 格式的文件。

  -z, --compress      force compression
  -d, --decompress    force decompression
  -t, --test          test compressed file integrity
  -l, --list          list information about .xz files
  -k, --keep          保留 (不删除) 输入文件
  -f, --force         强制覆盖输出文件并且 ()压缩链接
  -c, --stdout        输出到标准输出并且不删除输入文件
  -0 ... -9           compression preset; default is 6; take compressor *and*
                      decompressor memory usage into account before using 7-9!
  -e, --extreme       try to improve compression ratio by using more CPU time;
                      does not affect decompressor memory requirements
  -q, --quiet         suppress warnings; specify twice to suppress errors too
  -v, --verbose       be verbose; specify twice for even more verbose
  -h, --help          显示现在这个较短的帮助,然后退出
  -H, --long-help     显示较长的帮助 (也列出高级选项)
  -V, --version       显示版本号,然后退出

如果不给出 FILE,或者 FILE 是 “-”,就从标准输入读取。

Report bugs to <lasse.collin@tukaani.org> (in English or Finnish).
XZ Utils 的主页:<http://tukaani.org/xz/>

xz工具显示中英文混杂,于是下载了更新的xz-5.4.7版本(5.6和5.8在我的机器上编译失败,报如下错误

check/crc32_arm64.h: In function 'is_arch_extension_supported':
check/crc32_arm64.h:107:32: error: 'HWCAP_CRC32' undeclared (first use in this function)
  return (getauxval(AT_HWCAP) & HWCAP_CRC32) != 0;

),采用和安装5.0.4版相同的操作步骤,没想到sudo make install后遇到了找不到动态链接库问题。如下

xz --help
xz: /lib/aarch64-linux-gnu/liblzma.so.5: version `XZ_5.4' not found (required by xz)
xz: /lib/aarch64-linux-gnu/liblzma.so.5: version `XZ_5.2' not found (required by xz)
动态库链接到错的版本了
ls -l /lib/aarch64-linux-gnu/liblzma.so.5
lrwxrwxrwx 1 root root 16 9月  20  2022 /lib/aarch64-linux-gnu/liblzma.so.5 -> liblzma.so.5.0.0
而新编译的版本所在目录是
ls -l /usr/local/lib/liblzma.so.5.4.7
-rwxr-xr-x 1 root root 951648 7月  24 07:01 /usr/local/lib/liblzma.so.5.4.7

显示xz依赖库如下
ldd /usr/local/bin/xz
/usr/local/bin/xz: /lib/aarch64-linux-gnu/liblzma.so.5: version `XZ_5.4' not found (required by /usr/local/bin/xz)
/usr/local/bin/xz: /lib/aarch64-linux-gnu/liblzma.so.5: version `XZ_5.2' not found (required by /usr/local/bin/xz)
	linux-vdso.so.1 =>  (0x0000007fa6d3d000)
	/usr/lib/libzfh.so (0x0000007fa6ca3000)
	liblzma.so.5 => /lib/aarch64-linux-gnu/liblzma.so.5 (0x0000007fa6c56000)
	libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000007fa6c2a000)
	libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007fa6ae3000)
	/lib/ld-linux-aarch64.so.1 (0x0000007fa6d12000)
	libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x0000007fa6ad0000)

经过询问DeepSeek,他给出解释

这个问题是由于系统同时存在新旧版本的 liblzma 库,且动态链接器优先链接到了系统自带的旧版本库导致的。
问题根源在于 Linux 的库版本管理机制。当程序请求 liblzma.so.5 时,动态链接器会按以下顺序查找:
LD_LIBRARY_PATH 指定的路径
/etc/ld.so.cache 中的缓存
默认库路径 (/lib, /usr/lib)
通过更新符号链接和 ldconfig 缓存,可以确保系统找到正确版本的库文件。

他提供的临时解决办法有效。可以看到查到了正确版本的动态链接库。

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

ldd /usr/local/bin/xz | grep lzma
	liblzma.so.5 => /usr/local/lib/liblzma.so.5 (0x0000007f99507000)

xz --version
xz (XZ Utils) 5.4.7

帮助信息也都正常显示中文了。

xz --help
用法:xz [选项]... [文件]...
使用 .xz 格式压缩或解压缩文件。

  -z, --compress      强制压缩
  -d, --decompress    强制解压缩
  -t, --test          测试压缩文件完整性
  -l, --list          列出 .xz 文件的信息
  -k, --keep          保留(不要删除)输入文件
  -f, --force         强制覆写输出文件和(解)压缩链接
  -c, --stdout        向标准输出写入,同时不要删除输入文件
  -0 ... -9           压缩预设等级;默认为 6;使用 7-9 的等级之前,请先考虑
                      压缩和解压缩所需的内存用量!(会占用大量内存空间)
  -e, --extreme       尝试使用更多 CPU 时间来改进压缩比率;
                      不会影响解压缩的内存需求量
  -T, --threads=数量  使用最多指定数量的线程;默认值为 1;设置为 0
                      可以使用与处理器内核数量相同的线程数
  -q, --quiet         不显示警告信息;指定两次可不显示错误信息
  -v, --verbose       输出详细信息;指定两次可以输出更详细的信息
  -h, --help          显示本短帮助信息并退出
  -H, --long-help     显示长帮助信息(同时列出高级选项)
  -V, --version       显示软件版本号并退出

如果没有指定文件,或者文件为"-",则从标准输入读取。

请使用英文或芬兰语向 <xz@tukaani.org> 报告软件错误。
请使用中文向 TP 简体中文翻译团队 <i18n-zh@googlegroups.com>
报告软件的简体中文翻译错误。
XZ Utils 主页:<https://tukaani.org/xz/>

永久解决办法不行

echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/lzma.conf
/usr/local/lib

验证该文件确实存在,内容也对
cat /etc/ld.so.conf.d/lzma.conf
/usr/local/lib

sudo ldconfig

但是以上操作完成后,另开一个终端,不做export LD_LIBRARY_PATH操作,xz仍然报找不到动态链接库错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值