我有一个使用工具链编译的非常简单的arm可执行文件arm-linux-gnueabi。qemu-arm我可以毫无问题地执行它:
$ qemu-arm -L /usr/arm-linux-gnueabi/ ./a.out
Hello world !
Run Code Online (Sandbox Code Playgroud)
不带任何参数运行链接器似乎也有效:
qemu-arm /usr/arm-linux-gnueabi/lib/ld-linux.so.3
Usage: ld.so [OPTION]... EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]
You have invoked `ld.so', the helper program for shared library executables.
...
Run Code Online (Sandbox Code Playgroud)
但是,如果我希望链接器运行我的可执行文件,则会发生以下情况:
$ qemu-arm -L /usr/arm-linux-gnueabi/ /usr/arm-linux-gnueabi/lib/ld-linux.so.3 a.out
a.out: error while loading shared libraries: a.out: cannot open shared object file
Run Code Online (Sandbox Code Playgroud)
这是 strace 的输出:https://pastebin.com/uJ7AhBdh
知道为什么会发生这种情况吗?
后如何解决:运行gem5在系统调用仿真SE模式时,“致命的内核太旧”?我设法在某些条件下运行了一个静态链接的 hello world。
但是,如果我尝试针对 stdlib 运行一个 ARM 动态链接的:
./out/common/gem5/build/ARM/gem5.opt ./gem5/gem5/configs/example/se.py -c ./a.out
Run Code Online (Sandbox Code Playgroud)
它失败了:
fatal: Unable to open dynamic executable's interpreter.
Run Code Online (Sandbox Code Playgroud)
如何让它找到解释器?希望不要在我的主机根目录上复制我的交叉工具链的解释器。
对于 x86_64,如果我使用我的本机编译器,它就可以工作,并且正如预期的strace那样,它使用本机解释器,但如果我使用交叉编译器,它就不起作用。
当前的常见问题解答说不能使用动态可执行文件:http : //gem5.org/Frequently_Asked_Questions但我不相信它,然后这些演示文稿提到了它:
但不是如何实际使用它。
QEMU 用户模式有这个-L选项。
在 gem5 49f96e7b77925837aa5bc84d4c3453ab5f07408e 中测试
https://www.mail-archive.com/gem5-users@gem5.org/msg15582.html