いさぽん部屋(isapon.com)

ゲーム系プログラマによる特に方針のないブログ。技術系とカレー、ラーメンネタ多めだったはずが、最近はダイエットネタ多め。

Android NDK on windows: libcurl の configure でハマる

android-ndk-r9b, android-ndk-r9c にて確認。 環境は Windows8.1 + Cygwin

 libcurl をNDKプロジェクトに組み込もうと思ったのだが、そもそもlibcurlのビルド・・・・・・以前にconfigureが通らず格闘すること6時間。android-ndk/docs/STANDALONE-TOOLCHAIN.html にやり方が書いてあった。

※NDK_ROOT は android-ndk をインストールしたディレクトリとして記述しています。

make-standalone-toolchain.sh を使う

 まずはcygwin上でtoolchainを構築しないとなりません。そうしないと色々と泣けそうになることが可能です。というか泣けます。

ちなみにフルパスで書くと次の場所にあるスクリプトです。

${NDK_ROOT}/build/tools/make-standalone-toolchain.sh

使い方は下記の通り。API_LEVELとかそのあたりの変数はすぐ下に書いておくのでそちらをご参考あれ。

make-standalone-toolchain.sh \
 --platform=android-${API_LEVEL} \
 --install-dir=${TOOLCHAIN_DIR} \
 --ndk-dir=${NDK_ROOT} \
 --system=${SYSTEM}

API_LEVEL=androidのAPIレベル。4.0.3なら15とか。

TOOLCHAIN_DIR=どこでもOKです。/tmp/my-toolchains-android15-arm とかなんでも。

SYSTEM= windows もしくは windows-x86_64 などコンパイルする環境。NDKをダウンロードすると一個だけ入っているのですぐわかります。

SYSTEMの確認方法ですが、以下のディレクトリの中身を見ればOK。

${NDK_ROOT}/toolchains/arm-linux-androideabi-4.6\prebuilt\

ここにあるディレクトリがそのままSYSTEMに入ります。

※NDKを入れただけでは使えず、どうやらこのスクリプトを使ってtoolchainを構築しないとならないようです。ドキュメントを読む分にはそんなことをしなくてもいいと書いてあるのですが、どうやらやらないとトラブルに見舞われます。 

make-standalone-toolchain.sh トラブルシュート

make-standalone-toolchain中にpermission denied が出るときがあります。そういうときは、大体がandroid-ndkが書きこみ付加属性が付いていないのが原因なので、それを付け加えてあげればOKです。

chmod -R +rxw ${NDK_ROOT}
chmod -R +rxw ${TOOLCHAIN_DIR}

cygwinだし、あんまり気にしない! 

configureする

#!/bin/sh
SYSROOT=${TOOLCHAIN_DIR}
PATH=${SYSROOT}/bin:$PATH

./configure \
--with-sysroot=${SYSROOT} \
--disable-ftp \
--disable-file \
--disable-ldap \
--disable-ldaps \
--disable-rtsp \
--disable-proxy \
--disable-dict \
--disable-telnet \
--disable-tftp \
--disable-pop3 \
--disable-imap \
--disable-smtp \
--disable-gopher \
--build=`./config.guess` \
--host=arm-eabi \
--target=arm-eabi \
CC=arm-linux-androideabi-gcc \
CXX=arm-linux-androideabi-g++ \
LD=arm-linux-androideabi-ld \
AR=arm-linux-androideabi-ar \
AS=arm-linux-androideabi-as \
NM=arm-linux-androideabi-nm \
RANLIB=arm-linux-androideabi-ranlib \
SIZE=arm-linux-androideabi-size \
STRIP=arm-linux-androideabi-strip \
OBJDUMP=arm-linux-androideabi-objdump \
CPPFLAGS="-I${SYSROOT}/usr/include" \
CFLAGS="-nostdlib" \
LIBS="-lc -lz"