我无法解释的最奇怪的经历,是我把头发拔出来。我有一个二进制可执行文件MMM,它存在,我可以看到它具有x权限设置,当我按TAB键并且文件确认其可执行文件时,bash甚至会自动完成名称,但这会发生:
~/tmp$ ls -l
total 56
-rwxrwxr-x 1 polyphemus polyphemus 56948 Jun 25 22:43 MMM
~/tmp$ file MMM
MMM: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-, for GNU/Linux 2.2.5, stripped
~/tmp$ ./MMM
-bash: ./MMM: No such file or directory
因此,我从另一台服务器复制了此文件,并确保没有发生奇怪的文件损坏,不是那可以解释bash的荒谬说法,即该文件不存在,我将该文件复制到了NAS上,从NAS回到另一台服务器并重复完全相同的实验,只有这种情况才会发生:
~/tmp$ ls -l
total 56
-rwxr-xr-x 1 bernd bernd 56948 Jun 25 22:53 MMM
~/tmp$ file MMM
MMM: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-, for GNU/Linux 2.2.5, stripped
~/tmp$ ./MMM
JAVA_HOME is not set. ./MMM cannot start.
如果这两个Linux Mint盒都可以帮助它们,那么可以使用的是一台使用Mint 19的开发机器,而不能使用的一台则是全新安装的Mint 19.1。
安装正常,其他可执行文件也可以正常运行,然后我可以使用./file在bash中运行。
我研究并比较了购物者,没有发现任何别名,也没有发现任何别名。这使我拔头发。我希望有人见过。
答案 0 :(得分:0)
它可能是无法加载的库(因为它在您的系统上不存在),并带有错误消息。试试:
ldd .MMM
这将为您提供尝试加载的动态库,并告诉您是否缺少该库。
答案 1 :(得分:0)
错误似乎是JAVA_HOME env变量
JAVA_HOME is not set. ./MMM cannot start.
只需从您使用的任何Java版本设置JAVA_HOME
您可以像这样内联运行
JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::") ./MMM
答案 2 :(得分:0)
感谢丹尼斯·威廉姆森(Dennis Williamson)提供的问题的指针,其特征如下:
readelf -a MMM | grep interpreter
的{{1}}来划分此类二进制信息所需的解释器[Requesting program interpreter: /lib/ld-linux.so.2]
的32位体系结构的lib6库即可。完成此操作后,使我感到困惑的问题场景现在看起来像工作场景:
sudo apt install libc6:i386
二进制文件运行得很好!
令人愉快的结果。非常感谢StackOverflow和Dennis Williamson。