linux - 如何在 Ubuntu 上运行无扩展名(也许是 ELF)文件?

标签 linux bash shell

我在 Linux 上获得了一个“二进制”文件,在 Windows 上获得了一个用于特定任务的单独文件。这些程序是 Windows 上的 exe。该文件的 linux 版本在 linux 上具有与在 windows 上相同的功能。

但是,我无法执行此操作。我尝试(在终端上)仅通过文件名 ./[filename] 执行它,甚至尝试了 chmod +x [filename] 然后尝试了第二个方式。

对于一切...我得到的结果是:“找不到命令”。 (顺便说一句,文件肯定在那里)。

我该怎么办?它的文件命令产生:

ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=e805f746e65c09cc8b0c037d8a8c27ee0a6a051c

最佳答案

我猜这是在 64 位系统上编译 32 位。我使用 gcc 上的 -m32 选项将一个小的 c 文件交叉编译成二进制文件。这还需要一些额外的包。生成的 a.out 如下所示。

% file a.out
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=be02470c8337b96e7deaaff323bc53865991c3ab, not stripped

将其与 native 系统二进制文件进行比较

% file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=a0823e17cafbe5b2296346216445566840fdfd88, stripped

运行 a.out 向我展示了这一点。

% ./a.out
zsh: no such file or directory: ./a.out

我认为特定的“未找到命令”消息是 bash 打印出来的。我自己使用 zsh。

要让它工作,您可以安装 multilib 包。我没有将它缩小到确切的包,但在 Debian 上安装 gcc-multilib 可以提供您需要的一切。安装后,这就是我得到的。

% ./a.out
3.140523

(该程序应该估计 PI 的值)。

注意:我实际上需要安装 gcc-multilib 来编译文件。然后我卸载了这些包来模拟一个没有 32 位运行时库的 64 位系统。

关于linux - 如何在 Ubuntu 上运行无扩展名(也许是 ELF)文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40458246/

相关文章:

linux - 在 sed 命令中扩展 unix 变量

c++ - mmap 文件,其中包含一个不受该文件支持的额外页面

bash - 从 bash 脚本获取十六进制时间戳

bash - 如何递增字符串中的最后一个数字;狂欢

linux - 有效地测试一个端口是否在 Linux 上打开?

linux - 从参数中提取字符串的shell脚本

linux - 连接到 docker 容器上公开的端口时连接被拒绝

php - 在离线linux服务器上安装joomla 3尚未完成

bash - crontab 和手动运行脚本之间的不同结果

linux - sed 适用于硬编码文件名,但不适用于包含所述文件名的变量