qemu-user-static
is an important tool for cross-architecture developers.
It allows developers to create a chroot environment and run the
cross-compiled programs. For example, a developer may run an AArch64
executable without the overhead of system-level emulation.
I usually install the qemu-user-static
binaries from Ubuntu apt
repository. However, I encountered some bugs that have been fixed in the QEMU
upstream but the fixes haven't been back ported to the Ubuntu deb package.
Thus, I decided to build qemu-user-static from source code.
Instructions
Install the QEMU build dependencies with:
$ sudo apt-get build-dep qemu
Download QEMU source code with:
$ git clone git://git.qemu.org/qemu.git
$ cd qemu
$ git submodule update --init --recursive
Configure QEMU with --static
, --disable-system
, and
--enable-linux-user
:
$ ./configure \
--prefix=$(cd ..; pwd)/qemu-user-static \
--static \
--disable-system \
--enable-linux-user
Note
Specifying --disable-system
disables softmmu targets. It is a known
issue that softmmu targets rely on some shared libraries. Those softmmu
targets will cause link error if --static
is specified.
Build and install QEMU with:
$ make -j8
$ make install
Add -static
suffix to executables so that qemu-debootstrap
can
pick up these executables:
$ cd ../qemu-user-static/bin
$ for i in *; do cp $i $i-static; done