怎样使用qemu-aarch64-static来运行arm64架构的程序
在安装完QEMU后,常常是缺少qemu-arm
之类的工具的,我们可以使用qemu-user-static
来代替,安装方式如下:
$ sudo apt install qemu-user-static
安装完成之后,可以发现在/usr/bin目录下有一系列的qemu-*-static
的应用。
fxy@ubuntu:/usr/bin$ ls qemu-*-static
qemu-aarch64_be-static qemu-arm-static qemu-i386-static qemu-mips64el-static qemu-mipsn32-static qemu-ppc64le-static qemu-riscv64-static qemu-sparc32plus-static qemu-xtensaeb-static
qemu-aarch64-static qemu-cris-static qemu-m68k-static qemu-mips64-static qemu-mips-static qemu-ppc64-static qemu-s390x-static qemu-sparc64-static qemu-xtensa-static
qemu-alpha-static qemu-hexagon-static qemu-microblazeel-static qemu-mipsel-static qemu-nios2-static qemu-ppc-static qemu-sh4eb-static qemu-sparc-static
qemu-armeb-static qemu-hppa-static qemu-microblaze-static qemu-mipsn32el-static qemu-or1k-static qemu-riscv32-static qemu-sh4-static qemu-x86_64-static
每一个应用针对一种特定的硬件平台。接下来已我常用的aarch64平台来进行示范。
首先编写一个简单的hello world程序,显示出当前输入的参数个数以及最后一个参数,代码如下:
#include <iostream>
int main(int argc, char* argv[]){
std::cout << "Hello World!" << std::endl;
std::cout << "argc: " << argc << "\nthe final argument is:"<< argv[argc -1] << std::endl;
return 0;
}
将源码编译成arm64的二进制程序,使用file工具读取二进制文件的属性,确定其为ARM aarch64
架构的程序:
$ file hello_world
arm_test: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 4.9.0, with debug_info, not stripped
在Ubuntu下直接运行aarch64
架构的程序:
$ qemu-aarch64-static -L /usr/aarch64-linux-gnu/ arm_test
Hello World!
argc: 1
the final argument is:arm_test
其中-L
参数指定了适用于aarch64
架构程序的库文件路径。 输入多个参数给到应用程序,测试结果如下:
$ qemu-aarch64-static -L /usr/aarch64-linux-gnu/ arm_test first last
Hello World!
argc: 3
the final argument is:last
arm-test
测试程序下载路径: https://pan.baidu.com/s/1BcY0199ShdjA48Ed7V6SAQ 提取码: eta6
本教程测试使用的第一个QNX镜像
x86_64.hd
测试进行下载路径:https://pan.baidu.com/s/18KDhc00DQM3Vghz0druUOQ 提取码: 7q96 (7天有效期)