我使用qemu,qemu-user和安裝的gnueabi工具鏈運行Linux Mint 14。我用arm-linux-gnueabi-gcc test.c -o test
編譯了test.c。qemu-arm無法運行arm編譯的二進制文件
當我嘗試運行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程序,而不必效仿的整個手臂的Linux內核?
test.c的是
#include <stdio.h>
int main() {
printf("this had better work\n");
}
和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
如果在沒有OS的情況下運行,printf是你想要做的最後一件事,當然不是你想爲該系統編寫的第一個程序。打開一個在qemu上沒有意義的led,但是將一個字符從串行端口/ uart干擾到串行終端通常是不重要的。你也想從一個彙編程序開始,而不是C,因爲你必須確保你瞭解內存映射,程序加載的地方等等,引導代碼也不是微不足道的。 – 2013-04-23 17:01:52
這來自未安裝arm庫作爲系統庫(即使它們被安裝爲交叉編譯器的目標庫)。如果發行版支持它,那麼可以將arm安裝爲多目標目標(如同時支持x86和x86_64)。在Ubuntu中,這就像'apt-add-architecture arm && apt-get install libc6:arm'。我不知道薄荷。如果你不想去考慮它,只需用'-static'編譯。 – sh1 2017-09-15 21:00:08