Ubuntu 12.04LTS Beta2 でAndroid AOSP masterをビルド

Ubuntu 12.04LTS Beta2 でAndroid AOSP masterをビルド。

$ export PATH=/usr/lib/jvm/jdk1.6.0_31/bin:$PATH
$ . build/envsetup.sh 
$ lunch full-eng
$ nohup make -k > make.log3 2>&1 &
$ tail -F make.log3

以下のようなエラーになりました。

  ...
host C++: libGLcommon <= development/tools/emulator/opengl/host/libs/Translator/GLcommon/objectNameManager.cpp
host C++: libGLcommon <= development/tools/emulator/opengl/host/libs/Translator/GLcommon/FramebufferData.cpp
host StaticLib: libGLcommon (out/host/linux-x86/obj/STATIC_LIBRARIES/libGLcommon_intermediates/libGLcommon.a)
host SharedLib: libGLES_CM_translator (out/host/linux-x86/obj/lib/libGLES_CM_translator.so)
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/lib/libGLES_CM_translator.so] Error 1

out/host/linux-x86/obj/lib/libGLES_CM_translator.so を作るのに -lGL のライブラリが無いと怒られました。

http://packages.ubuntu.com/search?suite=precise§ion=all&arch=any&searchon=contents&keywords=libGL.so

libgl1-mesa-dev のパッケージを入れれば、/usr/lib/i386-linux-gnu/mesa/libGL.so が入ることがわかります。
でも、libgl1-mesa-dev はすでにインストール済みでした。

Ubuntu 10.04ではうまくビルドできるので、そこでリンクされたライブラリを見てみると

$ cd out/host/linux-x86/lib
$ ldd libGLES_CM_translator.so 
	linux-gate.so.1 =>  (0xf7724000)
	libGL.so.1 => /usr/lib32/mesa/libGL.so.1 (0xf766a000)
	libdl.so.2 => /lib32/libdl.so.2 (0xf7666000)
	libpthread.so.0 => /lib32/libpthread.so.0 (0xf764c000)
	librt.so.1 => /lib32/librt.so.1 (0xf7643000)
	libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf754d000)
	libm.so.6 => /lib32/libm.so.6 (0xf7527000)
	libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf7508000)
	libc.so.6 => /lib32/libc.so.6 (0xf73ad000)
	libX11.so.6 => /usr/lib32/libX11.so.6 (0xf7290000)
	libXext.so.6 => /usr/lib32/libXext.so.6 (0xf7280000)
	libXxf86vm.so.1 => /usr/lib32/libXxf86vm.so.1 (0xf727a000)
	libXdamage.so.1 => /usr/lib32/libXdamage.so.1 (0xf7276000)
	libXfixes.so.3 => /usr/lib32/libXfixes.so.3 (0xf7270000)
	libdrm.so.2 => /lib32/libdrm.so.2 (0xf7264000)
	/lib/ld-linux.so.2 (0xf7725000)
	libxcb.so.1 => /usr/lib32/libxcb.so.1 (0xf724a000)
	libXau.so.6 => /usr/lib32/libXau.so.6 (0xf7246000)
	libXdmcp.so.6 => /usr/lib32/libXdmcp.so.6 (0xf7240000)

どうもインストールされるライブラリのディレクトリ構成が変わったようです。/usr/lib32/mesa/libGL.so.1 で参照できるようにシンボリックリンクを張ってみます。

$ sudo ln -s /usr/lib/i386-linux-gnu/mesa /usr/lib32/
$ ls /usr/lib32/mesa/libGL.so.1
/usr/lib32/mesa/libGL.so.1
$ size /usr/lib32/mesa/libGL.so.1
   text	   data	    bss	    dec	    hex	filename
 347621	   6064	   1508	 355193	  56b79	/usr/lib32/mesa/libGL.so.1
$ 

これで再トライ。

============================================
PLATFORM_VERSION_CODENAME=AOSP
PLATFORM_VERSION=4.0.4.0.4.0.4
TARGET_PRODUCT=full
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
HOST_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.2.0-20-generic-x86_64-with-Ubuntu-12.04-precise
HOST_BUILD_TYPE=release
BUILD_ID=OPENMASTER
OUT_DIR=out
============================================
host SharedLib: libGLES_CM_translator (out/host/linux-x86/obj/lib/libGLES_CM_translator.so)
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/lib/libGLES_CM_translator.so] Error 1
host SharedLib: libEGL_translator (out/host/linux-x86/obj/lib/libEGL_translator.so)
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/lib/libEGL_translator.so] Error 1
host SharedLib: libGLES_V2_translator (out/host/linux-x86/obj/lib/libGLES_V2_translator.so)
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/lib/libGLES_V2_translator.so] Error 1
make: Target `droid' not remade because of errors.

まだだめ。

Ubuntu 10.04の方で調べると

$ find /usr/lib32 -name "libGL.so*"
/usr/lib32/libGL.so
/usr/lib32/mesa/libGL.so.1.2
/usr/lib32/mesa/libGL.so.1
$ ls -l /usr/lib32/libGL.so 
lrwxrwxrwx 1 root root 15 2011-05-02 12:44 /usr/lib32/libGL.so -> mesa/libGL.so.1

きっと/usr/lib32/libGL.so が足りないせいだ。

Ubuntu 12.04で

$ cd /usr/lib32
$ sudo ln -s mesa/libGL.so.1 libGL.so
$ ls -l /usr/lib32/libGL.so 
lrwxrwxrwx 1 root root 15 Apr 12 13:57 /usr/lib32/libGL.so -> mesa/libGL.so.1
$ size /usr/lib32/libGL.so 
   text	   data	    bss	    dec	    hex	filename
 347621	   6064	   1508	 355193	  56b79	/usr/lib32/libGL.so

これでビルドできました!

要するに、/usr/lib32/libGL.so が足りなかった。

masterはgcc 4.6でビルドできるようになっています。

emulatorの起動は以下の通り。
Xvfbを使ってAndroidのemulatorを画面無しで立ち上げる - 組み込みの人。

emulator64-arm と emulator64-x86ができていて、emulatorを起動するとそのどちらかがexecされるようになってました。

$ cd out/host/linux-x86/bin
$ ls emulator*
emulator  emulator64-arm  emulator64-x86  emulator-arm  emulator_renderer  emulator-ui  emulator-x86
koba@ubuntu1204:~/android-master/out/host/linux-x86/bin$ file emulator*
emulator:          ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
emulator64-arm:    ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
emulator64-x86:    ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
emulator-arm:      ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
emulator_renderer: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x2bc3dd1e3abcb087943d30701692f0b97d1ba9e4, not stripped
emulator-ui:       ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
emulator-x86:      ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped

psで見ると、emulatorのプロセスからjava com.android.ddms.Main ping emulator 19.0 というコマンドの子プロセスが生成されている。これは何だろう。

$ ps l
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
0  1000  1221  1220  20   0  27884  3508 wait   Ss   pts/0      0:01 -bash
0  1000  4848  4847  20   0  27516  8452 wait   Ss   pts/1      0:07 -bash
0  1000 24731 24730  20   0  27520  8548 n_tty_ Ss+  pts/2      0:03 -bash
0  1000 31704 24731  20   0  96008 16644 poll_s S    pts/2      0:00 Xvfb :3 -screen 0 640x480x16
0  1000 31797  1221  20   0 875480 325828 poll_s S+  pts/0      1:58 /home/koba/android-master/out/host/linux-x86/bin/emulator64-arm -show-kernel -shell
0  1000 31801 31797  20   0 1073736 44184 futex_ Sl+ pts/0      0:03 java -Xmx256M -Dcom.android.ddms.bindir=/home/koba/android-master/out/host/linux-x86/bin -classpath /home/koba/android-master/out/host/linux-x86/framework/ddms.jar:/home/koba/android-master/out/host/linux-x86/framework/swtmenubar.jar:/home/koba/android-master/prebuilts/tools/linux-x86_64/swt/swt.jar com.android.ddms.Main ping emulator 19.0
0  1000 31903  4848  20   0   9720  1048 -      R+   pts/1      0:00 ps l