情况描述:
一台旧的centos 5的java应用需要迁移到centos7.9 上面,拷贝JDK 1.6 过来后,发现执行java命令报错
初步分析:
1、缺少库包:
bash: ./java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
2、尝试安装缺少的库文件
yum install -y /lib/ld-linux.so.2
# 发现centos7.9 yum 不提供这个库文件
3、从旧的机器上面拷贝这个库文件过来 (不推荐)
lrwxrwxrwx 1 root root 14 Aug 16 10:58 /lib/ld-linux.so.2 -> /lib/ld-2.5.so
4、再次执行
bash: ./java: Permission denied
5、怀疑是权限问题,貌似root用户都不能执行,那应该没啥权限问题
6、考虑是新拷贝过来的库文件权限异常,发现拷贝过来的库文件没有执行权限,添加执行权限
# 修改权限
chmod 0755 /lib/ld-2.5.so
# 查看文件状态
stat /lib/ld-2.5.so
7、发现新的库文件依赖问题
./java: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory
8、换了台centos7.7 发现yum 能提供/lib/ld-linux.so.2
centos7.7 # yum provides /lib/ld-linux.so.2
glibc-2.17-292.el7.i686
centos7.7 # yum install -y /lib/ld-linux.so.2
9、centos 7.7 能正常执行jdk 1.6 的java命令
总结:
1、主要是centos 7.9 yum没有/lib/ld-linux.so.2导致走了弯路,估计是不兼容这个32位的库包了,没深究
2、另外拷贝文件,需要注意源文件的文件权限,时间长了不好找原因
3、如果系统跨大版本,需要考虑兼容性问题,通过yum能避免一些兼容性的问题,并尝试降低版本缩小版本差距试试