运维过程中很多老程序是32位,只能在很老的linux上跑,有没有办法在kylin操作系统上跑呢?实测可以解决,具体如下:

1、判断一个程序能否在某个操作系统上运行,可通过执行ldd 进程名 判断是否能运行或缺失动态库。

eg:ldd syncfile

报 not a dynamic executable(不是动态可执行文件)或出现not found(部分动态库缺失)

2、对不是动态可执行文件错误,一般是32位程序在64位操作系统上无法运行,特别是最新系统如麒麟,仅支持64位包,不提供32位包,linux高版本系统也默认不能安装32位包,需带参

如linux系统需执行yum install -y glibc.i686 libstdc++.i686 --setopt=protected_multilib=false 后才不会报“不是动态可执行文件”

麒麟kylin因为没有32位包,故以上命令无法执行成功,需通过变相离线安装linux下的相关包解决,具体如下:

1)在一台linux机器上打包离线rpm文件,必须先执行yum install -y yum-utils(验证环境),再yum deplist glibc.i686(查看依赖包),repotrack glibc.i686(下载全量依赖包到当前执行目录,注意命令执行后包含了32位和64位rpm,强烈建议下载完毕后rm -rf *x86_64.rpm删除64位包后,再压缩到kylin机器上解压安装,否则容易64位程序强制安装导致麒麟系统异常)

2)在麒麟kylin上传解压后,执行rpm -Uvh --force --nodeps *.rpm(注意一定要检查64的rpm包没有,否则强制安装了64位包与kylin原来系统包冲突,导致系统异常)

再ldd 进程名 一般不会报不是动态可执行文件,但可能会出现not found。

3、对出现not found情况,只需ldd 进程|grep not 在对应的linux机器上找到该so文件copy过来到对应路径便可,注意不要与本操作系统的so文件冲突,建议在程序目录下建lib目录,相关not found未找到的so文件放在该目录,再在/etc/profile中配置项export LD_LIBRARY_PATH=中追加该lib路径,source /etc/profile ,ldd 进程名后 基本可以解决not found的问题。