bionicとdynamic linkしたexecutableのビルド

externalにpingっぅ見慣れた名前を発見。touch ping.cして、make -n pingしてみた。いっぱーいオプションつけてコンパイル&リンクしてる。ごくり。ということで、external/helloというディレクトリを作って、external/ping/Android.mkをコピー。printfするだけのhello.cを書いて、Android.mkを適当に変更。make hello。ちゃんと作ってくれる。Emulator起動して、adb push hello /data/hello、adb shell /data/hello。動いた。ということで、カーネル上でネィティブにbionicと動的リンクするアプリケーションを書くなら、とりあえず、externalにディレクト切って、external/ping/Android.mkをコピーして使う。と。以下、一応pingのビルドログをちょっとだけ読みやすく編集したもの。

prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc  \
	-I system/core/include   \
	-I hardware/libhardware/include   \
	-I hardware/ril/include   \
	-I dalvik/libnativehelper/include   \
	-I frameworks/base/include   \
	-I external/skia/include   \
	-I out/target/product/generic/obj/include   \
	-I bionic/libc/arch-arm/include   \
	-I bionic/libc/include   \
	-I bionic/libstdc++/include   \
	-I bionic/libc/kernel/common   \
	-I bionic/libc/kernel/arch-arm   \
	-I bionic/libm/include   \
	-I bionic/libm/include/arch/arm   \
	-I bionic/libthread_db/include   \
	-I external/ping   \
	-I out/target/product/generic/obj/EXECUTABLES/ping_intermediates  \
	-c  \
	-fno-exceptions \
	-Wno-multichar \
	-march=armv5te \
	-mtune=xscale \
	-msoft-float \
	-fpic \
	-mthumb-interwork \
	-ffunction-sections \
	-funwind-tables \
	-fstack-protector \
	-D__ARM_ARCH_5__ \
	-D__ARM_ARCH_5T__ \
	-D__ARM_ARCH_5E__ \
	-D__ARM_ARCH_5TE__ \
	-include system/core/include/arch/linux-arm/AndroidConfig.h \
	-DANDROID \
	-fmessage-length=0 \
	-W \
	-Wall \
	-Wno-unused \
	-DSK_RELEASE \
	-DNDEBUG \
	-O2 \
	-g \
	-Wstrict-aliasing=2 \
	-finline-functions \
	-fno-inline-functions-called-once \
	-fgcse-after-reload \
	-frerun-cse-after-loop \
	-frename-registers \
	-DNDEBUG \
	-UDEBUG \
	-mthumb \
	-Os \
	-fomit-frame-pointer \
	-fno-strict-aliasing \
	-finline-limit=64      \
	-MD \
	-o out/target/product/generic/obj/EXECUTABLES/ping_intermediates/ping.o \
	external/ping/ping.c

cp out/target/product/generic/obj/EXECUTABLES/ping_intermediates/ping.d \
	out/target/product/generic/obj/EXECUTABLES/ping_intermediates/ping.P; \
	sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$//' -e '/^$/ d' -e 's/$/ :/' < \
	out/target/product/generic/obj/EXECUTABLES/ping_intermediates/ping.d >> \
	out/target/product/generic/obj/EXECUTABLES/ping_intermediates/ping.P; \
	rm -f out/target/product/generic/obj/EXECUTABLES/ping_intermediates/ping.d

prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-g++ \
	-nostdlib \
	-Bdynamic \
	-Wl,-T,build/core/armelf.x \
	-Wl,-dynamic-linker,/system/bin/linker \
	-Wl,--gc-sections \
	-Wl,-z,nocopyreloc \
	-o out/target/product/generic/obj/EXECUTABLES/ping_intermediates/LINKED/ping \
	-Lout/target/product/generic/obj/lib -Wl,-rpath-link=out/target/product/generic/obj/lib \
	-lc \
	-lstdc++ \
	-lm  out/target/product/generic/obj/lib/crtbegin_dynamic.o \
	out/target/product/generic/obj/EXECUTABLES/ping_intermediates/ping.o \
	out/target/product/generic/obj/STATIC_LIBRARIES/liblog_intermediates/liblog.a \
	out/target/product/generic/obj/STATIC_LIBRARIES/libcutils_intermediates/libcutils.a \
	out/target/product/generic/obj/STATIC_LIBRARIES/libc_intermediates/libc.a \
	-Wl,--no-undefined prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/lib/gcc/arm-eabi/4.2.1/interwork/libgcc.a \
	out/target/product/generic/obj/lib/crtend_android.o