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