我正在运行Linux Mint 14,安装了qemu,qemu-user和gnueabi工具链.我编译test.c以用arm-linux-gnueabi-gcc test.c -o test
.
当我试着跑 qemu-arm /usr/arm-linux-gnueabi/lib/ld-linux.so.3 test
我收到一个错误说:test: error while loading shared libraries: test: cannot open shared object file: No such file or directory
.qemu-arm test
正如我之前尝试的那样,跑步给出了/lib/ld-linux.so.3: No such file or directory
但是,该文件确实存在且可以访问.
$ stat /usr/arm-linux-gnueabi/lib/ld-linux.so.3
File: `/usr/arm-linux-gnueabi/lib/ld-linux.so.3' -> `ld-2.15.so'
Size: 10 Blocks: 0 IO Block: 4096 symbolic link
Device: 801h/2049d Inode: 4083308 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2013-04-22 16:19:48.090613901 -0700
Modify: 2012-09-21 08:31:29.000000000 -0700
Change: 2013-04-22 15:58:41.042542851 -0700
Birth: -
Run Code Online (Sandbox Code Playgroud)
有谁知道如何让qemu运行arm程序而不必模拟整个ARM内核?
test.c是
#include <stdio.h>
int main() {
printf("this had better work\n");
}
Run Code Online (Sandbox Code Playgroud)
并且file test
是
test: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.31, BuildID[sha1]=0xf2e49db65394b77c77ee5b65b83c0cc9220cbfc0, not stripped
Run Code Online (Sandbox Code Playgroud)
小智 24
您可以通过使用-L标志提供arm-linux-gnueabi共享库的路径来运行该示例.
qemu-arm -L /usr/arm-linux-gnueabi/
Run Code Online (Sandbox Code Playgroud)
还要确保未设置LD_LIBRARY_PATH.
unset LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)
Nin*_*ing 11
在使用汇编代码运行C程序时,我也遇到了这个问题.我的解决方案是使用选项"-static"构建可执行文件
arm-linux-gnueabi-gcc -static -g main.c square.s
Run Code Online (Sandbox Code Playgroud)
然后
qemu-arm a.out
Run Code Online (Sandbox Code Playgroud)
不会报告错误,说"找不到/lib/ld-linux.so.3".
唯一的缺点是可执行文件可能具有较大的大小.但是,当您只想测试代码时,它会很有用.
当然,你可以使用Balau的方法(参见artless noise的答案).但是,如果你不想在这一步中感到沮丧,比如"UART串口",只需运行一个简单的"测试"功能,那就试试我的修复.
$ export QEMU_LD_PREFIX=/usr/arm-linux-gnueabi
Run Code Online (Sandbox Code Playgroud)
这对我有用。基本上与以下内容相同:
$ qemu-arm -L /usr/arm-linux-gnueabi/
Run Code Online (Sandbox Code Playgroud)
您可以将其添加到〜/ .bashrc文件中,这样就不必在每次打开终端时都键入它。
我通过将以下库复制到/ lib解决了这个问题,但我相信应该有更好的解决方案,而不是我发明的这个讨厌的解决方案!
sudo cp /usr/arm-linux-gnueabi/lib/ld-linux.so.3 /lib
sudo cp /usr/arm-linux-gnueabi/lib/libgcc_s.so.1 /lib
sudo cp /usr/arm-linux-gnueabi/lib/libc.so.6 /lib
Run Code Online (Sandbox Code Playgroud)
如果我有兴趣了解其他更好的解决方案,请告诉我.
如果你想在没有 Linux 的情况下运行ARM,那么你需要一个不同的编译器(至少)。 是Linuxarm-linux-gnueabi-gcc
的编译器。和编译器是紧密相连的。您将需要一个带有qemu可移植层的编译器。移植新库libc
newlib
请参阅:Balau和Google newlib+qemu。一个newlib
端口托管在Github上,似乎与Balau博客相同。
通常,非 Linux gcc 称为arm-none-eabi-gcc
. 一些配置脚本可以识别前缀arm-none-eabi- 。
归档时间: |
|
查看次数: |
32982 次 |
最近记录: |