【问题标题】:cannot open /lib/ld-linux-aarch64.so.1 in qemu or gem5无法在 qemu 或 gem5 中打开 /lib/ld-linux-aarch64.so.1
【发布时间】:2020-10-27 01:53:11
【问题描述】:

我试图在我的台式计算机上模拟一个简单的 Hello world ARM 示例。我尝试了 qemu 和 gem5。两者都给出了类似的错误。他们找不到ld-linux-aarch64.so.1。其实我也找不到。如果我能找到它,我会用 -L(在 qemu 中)或 --redirects(在 gem5 中)来展示它。

文件是:

armhello: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=23a21b7a545ac510923b6b3713d2bbee092f820a, for GNU/Linux 3.7.0, not stripped

编译为:aarch64-linux-gnu-gcc

我正在尝试在 qemu 中运行它:

qemu-aarch64 armhello

我收到了这个错误:

/lib/ld-linux-aarch64.so.1: No such file or directory

我尝试在 gem5 中运行它:(simpleARM.py 指向我的可执行文件(命名为 armhello))

build/ARM/gem5.opt configs/tutorial/simpleARM.py

我收到了这个错误:

panic: panic condition fd < 0 occurred: Failed to open file /lib/ld-linux-aarch64.so.1.

我该如何解决这个问题?

注意:我知道编译时可以使用 --static。但我需要运行更复杂的动态链接二进制文件,我无法更改它们。这只是一个例子。

【问题讨论】:

  • ld-linux-aarch64.so.1 是来宾二进制文件的动态链接器。如果您有一个动态链接的来宾二进制文件,那么您不仅需要告诉模拟器二进制文件本身,还需要告诉模拟器动态链接器和来宾二进制文件链接到的所有动态库(通常通过向它传递一个选项来告诉它一个目录它将所有库都放在它们在来宾的真实文件系统上的通常位置)。

标签: qemu arm64 gem5


【解决方案1】:

对于 gem5,您可以使用 --redirects--interp-dirHow to run a dynamically linked executable syscall emulation mode se.py in gem5?

对于 qemu,你需要 -L: Using dynamic linker with qemu-arm

【讨论】:

  • 感谢您的回答。我现在可以运行简单的 hello world 示例。我不确定如何将 --redirect 与更复杂的二进制文件一起使用。我理解它“重定向” /lib 到我们决定的某个路径。它适用于ld-linux-aarch64.so.1。但例如,我有一个在编译期间链接的共享对象。这个共享对象是libarmnn.so.22,它位于/home/username/armnn/build。如何显示 gem5 的路径以便它可以访问它?
  • @cervX --redirect 为所有文件访问转换 &lt;guest-path-prefix&gt;=&lt;actual-host-path-prefix&gt;。来宾在给定路径搜索 lib。因此,您必须确定来宾将尝试使用的共享库路径,例如with readelf 或来自错误消息,然后使用执行正确重定向的前缀。这取决于您的链接方式。如果 .so 使用完整路径,您可能不需要任何重定向。
  • 我明白了。我使用 gem5 的 --env 选项克服了这个问题。我将留下此评论以供将来参考。
猜你喜欢
  • 2022-07-13
  • 2022-10-07
  • 2023-01-25
  • 2014-10-14
  • 2021-12-21
  • 2020-07-18
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多