我在ubuntu linux下,写了写小程序准备放android手机上用。
一般而言,能在linux下把交叉编译环境弄出来就不错了,可是我们用的是ubuntu,加上我撞了大运,居然莫名其妙apt-get就装上了交叉模拟运行环境。回头一看发现奥妙,不得不发文一篇纪念一下。qemu,你太强了,特别是qemu-user-staitc!
首先简述一下交叉编译环境安装:
要进行这一步编译工作,当然首先要用apt-get装上交叉编译工具gcc-4.4-linux-gnueabi等等,
sudo apt-get install gcc-4.4-linux-gnueabi
可以用apt-cache search arm-linux查看有哪些工具你想装的。就这样就装上了!
然后编译源码时一般可以,sudo ./configure --host=arm-linux-gnueabi 指定交叉编译环境
如果configure标准的化可以这样指定交叉编译环境,这些环境用到的lib include等等会在/usr会装在目录下的arm-linux-gnueabi目录下,/usr/local指本地,而交叉编译器会在/usr/bin内叫做arm-linux-gnueabi-gcc之类,很有规律!若有版本号而没有无版本号的,可以ln链接一下!如过没有configure或
者不规范的那就只有手动修正了,还有缺少库的问题很麻烦。实在不行export CC=arm-linux-gnueabi-gcc试试!
第二步,运行调试会发现,电脑上运行不了,非要放到android机器上或者模拟器里面去才行,太麻烦了。为什么会这样呢?因为交叉编译出来的东西,指令集不是针对X86的。
有什么办法可以让编译调试都在电脑上的?上网搜索可以发现qemu这个模拟器这个模拟器太强大了!但是网上搜索之后会发现,需要编译很多环境才能弄个arm虚拟机出来,很是不爽。飞得要虚拟机?答案是不!
apt-cache search qemu看看
qemu-user
qemu-user-static
这两个包干啥用的?
装上之后man qemu-user-static看看说明
NAME
qemu-user-static - QEMU User Emulator (static version)
SYNOPSIS
qemu-user-static [options] program [program-arguments...]
DESCRIPTION
The qemu-user-static emulator can run binaries for other architectures
but with the same operating system as the current one.
支持在同一操作系统下模拟运行不同指令集的程序!
所以还需要装arm虚拟机吗?不用了!自己机器现在就已经可以直接运行arm程序了,类似于wine接管了win32程序,qemu可以接管其他CPU架构程序无缝运行了(当然要有特殊库需要自己弄)。