arm不能运行arm编译的二进制文件

我使用qemu,qemu-user和安装的gnueabi工具链运行Linux Mint 14。 我用arm-linux-gnueabi-gcc test.c -o test编译了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: -

有谁知道我可以如何让qemu运行arm程序而不必模拟整个arm Linux内核?

test.c是

#include <stdio.h>
int main() {
    printf("this had better workn");
}

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

如果你想在没有Linux的情况下运行ARM ,那么你需要一个不同的编译器(至少)。 arm-linux-gnueabi-gccLinux的编译器。 编译器和libc是密切关联的。 您将需要一个带有可移植层的newlib编译器,用于qemu.porting newlib

请参阅:Balau和Google newlib + qemu。 一个newlib端口在Github上托管,看起来与Balau博客相同。

通常,非Linux gcc被称为arm-none-eabi-gcc 。 前缀arm-none-eabi-被一些配置脚本识别。


你可以运行这个例子,使用-L标志提供一个到arm-linux-gnueabi共享库的路径。

qemu-arm -L /usr/arm-linux-gnueabi/

还要确保没有设置LD_LIBRARY_PATH。

unset LD_LIBRARY_PATH

使用汇编代码运行C程序时,我也遇到了这个问题。 例如,我的解决方案是使用选项“-static”构建可执行文件

arm-linux-gnueabi-gcc -static -g main.c square.s

然后

qemu-arm a.out

将不会报告“无法找到/lib/ld-linux.so.3”的错误。

唯一的缺点是可执行文件的大小可能很大。 但是当你只是想测试你的代码时它很有用。

当然,你可以使用Balau的方法(请参阅artless noise的回答)。 但是如果你不想在这个步骤中感受到像“UART串行端口”那样的沮丧,那只是运行一个简单的“测试”功能,请尝试一下我的修复。

链接地址: http://www.djcxy.com/p/86931.html

上一篇: arm can't run arm compiled binary

下一篇: ARM cross compiling