为什么我不能在ubuntu上运行基于alpine的C程序? [重复]

问题描述 投票:-1回答:1

我在一个高山linux容器内编译了一个简单的hello world C程序,并将其复制到了我的ubuntu主机上。令我惊讶的是,我无法在ubuntu主机上运行二进制文件。相反,尝试执行程序时出现以下错误。

$ /bin/bash ./hello
$ ./hello: ./hello: cannot execute binary file

为什么我不能在ubuntu上运行在alpine上编译的程序?

UPDATE我犯了尝试将C程序作为bash脚本运行的错误。但是,更正错误后,仍然出现错误...

$ ./hello
$ bash: ./hello: No such file or directory

我已将二进制文件制成可执行文件,因此这不应该成为问题。运行在主机上编译的相同程序时,不会出现此错误消息。

UPDATE让我澄清几点。

  • 在ubuntu容器中构建了一个可执行文件,并将其复制到ubuntu主机上。该可执行文件有效。
  • 另一个可执行文件是使用高山容器构建的,并已复制到ubuntu主机上。该可执行文件不起作用。
  • 两个可执行文件都有其可执行位设置。当我运行./hello时,我在有问题的可执行文件所在的目录中进行操作。
  • 当我运行使用ubuntu容器编译的可执行文件上的文件时,得到以下输出。
hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=bc9e3e2ecfc026f8077dca28dbbdee4778862d7a, not stripped
  • 当我对使用ubuntu容器编译的可执行文件运行ldd]时>得到以下输出。
linux-vdso.so.1 (0x00007ffdbc79e000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f517b5ae000)
/lib64/ld-linux-x86-64.so.2 (0x00007f517bba1000)
  • 当我运行使用高山容器编译的可执行文件上的文件时,得到以下输出。
hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-, with debug_info, not stripped
  • 当我运行使用高山容器编译的可执行文件上的ldd时,得到以下输出。
linux-vdso.so.1 (0x00007ffec27f7000)
libc.musl-x86_64.so.1 => not found

我在一个高山linux容器内编译了一个简单的hello world C程序,并将其复制到了我的ubuntu主机上。令我惊讶的是,我无法在ubuntu主机上运行二进制文件。相反,我得到了...

linux ubuntu gcc alpine
1个回答
2
投票

Alpine发行版使用musl作为标准C库实现。


0
投票

您尝试了strace吗?请密切注意库(.so)的加载]


-1
投票

错误No such file or directory仅表示您在此路径上没有此文件。执行命令ls获取当前目录中的文件列表。

关于使文件可执行的其他错误:

chmod +x ./hello

将会成功。然后您可以尝试运行它:

./hello

并且根据您对ldd命令的回答:

linux-vdso.so.1 (0x00007ffec27f7000)
libc.musl-x86_64.so.1 => not found

您错过了此库:libc.musl-x86_64.so,这是您收到此错误的原因

© www.soinside.com 2019 - 2024. All rights reserved.