Gcc 运行rhel6生成的可执行文件时,rhel7计算机上出现导入错误 我在RHEL6上有C++项目,它工作得很好。 但在rhel7机器上,它抛出以下错误:

Gcc 运行rhel6生成的可执行文件时,rhel7计算机上出现导入错误 我在RHEL6上有C++项目,它工作得很好。 但在rhel7机器上,它抛出以下错误:,gcc,build,centos,g++,rhel,Gcc,Build,Centos,G++,Rhel,ImportError:liblzma.so.0:无法打开共享对象文件:无此类文件 文件或目录 现在,我明白了,在rhel7机器上我们有: $ ldconfig -p | grep "liblzma" liblzma.so.5 (libc6,x86-64) => /lib64/liblzma.so.5 liblzma.so.5 (libc6) => /lib/liblzma.so.5 liblzma.so (libc6,x86-64) =

ImportError:liblzma.so.0:无法打开共享对象文件:无此类文件 文件或目录

现在,我明白了,在rhel7机器上我们有:

$ ldconfig -p | grep "liblzma" 
    liblzma.so.5 (libc6,x86-64) => /lib64/liblzma.so.5
    liblzma.so.5 (libc6) => /lib/liblzma.so.5
    liblzma.so (libc6,x86-64) => /lib64/liblzma.so
$ ldconfig -p | grep liblzma
    liblzma.so.0 (libc6,x86-64) => /usr/lib64/liblzma.so.0
    liblzma.so (libc6,x86-64) => /usr/lib64/liblzma.so
在rhel6机器上,我们有:

$ ldconfig -p | grep "liblzma" 
    liblzma.so.5 (libc6,x86-64) => /lib64/liblzma.so.5
    liblzma.so.5 (libc6) => /lib/liblzma.so.5
    liblzma.so (libc6,x86-64) => /lib64/liblzma.so
$ ldconfig -p | grep liblzma
    liblzma.so.0 (libc6,x86-64) => /usr/lib64/liblzma.so.0
    liblzma.so (libc6,x86-64) => /usr/lib64/liblzma.so
如何更正此错误?
因为rhel6构建可执行文件应该/可以在rhel7上工作。(rhel6的任何更高版本)

所需库的较旧版本(
/usr/lib64/liblzma.so.0
)由包
xz compat libs
提供。简单地说:

yum install xz-compat-libs

只要在RHEL7机器上创建一个链接就可以完成这项工作

$ ln -s  /lib64/liblzma.so  liblzma.so.0

然后,您可以将创建链接的目录添加到环境变量“LD_LIBRARY_PATH”中。此env变量用于查找代码要使用的动态库。

无需安装…因为rhel7上的liblzma已经支持rhel6 liblzma。您的应用程序二进制文件是根据旧库编译的。即使是较新的lib可能(也可能不)具有完全的ABI兼容性,通过手动创建符号链接和重写env-var来处理这个问题远不如简单地安装最低限度的compat包。尤其是在企业系统上。