从源码安装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仍然报找不到动态链接库错。
9万+

被折叠的 条评论
为什么被折叠?



