CentOS6系にanrdoid-ndk-10eをインストール(ビルドは未検証)

anrdoid-ndk-10e(64bit)をCentOS6系にインストールする必要があったがその場合に色々はまったのでメモ。

**あくまでインストールまでの確認。そのあと実際に利用できるかまではまだ未検証なので注意**

# そもそも可能ならば

後述するがandroid-ndk-r10eではglibc2.14以上が要求される。
色々面倒なことをしたくないのであれば（というか可能だったら極力）OSのglibcのバージョンが2.14より大きいものを使えば良い。

[RedHat系でのglibcの脆弱性(GHOST)への対応方法](http://qiita.com/biatunky/items/231b673832a21f9f9524)

上記に記載されている様にCentOS7やAmazonLinux、新しいUbuntuであればglibcが新しいので本当はそれを使ったほうが良さそう。ビルドしたりするとインストール後も色々はまりそう。。。（あとのメンテなども大変)

# やってみる

```
$./android-ndk-r10e-linux-x86_64.bin
./android-ndk-r10e-linux-x86_64.bin: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./android-ndk-r10e-linux-x86_64.bin)
```

なるほど。GLIBCのバージョンが古いのでだめだと。

GLIBCのバージョンを確認

```
$ /lib64/libc.so.6
GNU C Library stable release version 2.12, by Roland McGrath et al.
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.4.7 20120313 (Red Hat 4.4.7-11).
Compiled on a Linux 2.6.32 system on 2015-05-27.
Available extensions:
	The C stubs add-on version 2.1.2.
	crypt add-on version 2.1 by Michael Glad and others
	GNU Libidn by Simon Josefsson
	Native POSIX Threads Library by Ulrich Drepper et al
	BIND-8.2.3-T5B
	RT using linux kernel aio
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.
```

GLIBCで2.14以上が必要だけど実際には2.12なのでエラーだと

# GLIBCをビルドしてみる

事前準備。ビルド時に必要なものをまとめてインストール。

```
$sudo yum groupinstall "Development Tools"
```

[chroot 環境に glibc を突っ込むメモ](http://togakushi.bitbucket.org/build/html/glic2.5_install.html)

本当はやりたくないけど、しょうがないのでビルド。

```
$wget https://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
$tar -zxvf glibc-2.14
$cd glibc-2.14
$mkdir BUILD
$cd BUILD
$../configure --prefix=${HOME}/local/glibc
$make
$make check
$make install
```

確認してみる。

```
~/local/glibc/lib/libc.so.6
GNU C Library stable release version 2.14, by Roland McGrath et al.
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.4.7 20120313 (Red Hat 4.4.7-11).
Compiled on a Linux 2.6.32 system on 2015-08-06.
Available extensions:
	crypt add-on version 2.1 by Michael Glad and others
	GNU Libidn by Simon Josefsson
	Native POSIX Threads Library by Ulrich Drepper et al
	BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.
```

2.14として認識しているので良さそう。

# ndkの再インストール

まずは環境変数を設定。

```
$export LD_LIBRARY_PATH=~/local/glibc/lib/
```

ダウンロードして、実行してみる

```
$wget http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin
$chmod a+x android-ndk-r10e-linux-x86_64.bin
$./android-ndk-r10e-linux-x86_64.bin
・・・
Sub items Errors: 1332

Archive Errors: 1

Sub items Errors: 1332
```

実行(解凍）ができるようになったけどエラーが出てしまった。。。

[Error encountered installing Android NDK](https://stackoverflow.com/questions/28458758/error-encountered-installing-android-ndk)

同じことが起きている人がいるっぽい。
色々試行錯誤してみてもしかしてと思って`md5sum`してみたら全然違ったので再度取得。。。

```
$wget http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin
$chmod a+x android-ndk-r10e-linux-x86_64.bin
$md5sum android-ndk-r10e-linux-x86_64.bin
19af543b068bdb7f27787c2bc69aba7f  android-ndk-r10e-linux-x86_64.bin
$./android-ndk-r10e-linux-x86_64.bin
・・・
Everything is Ok
```

よさそう。

```
$android-ndk-r10e/ndk-build -v
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu
```

認識できた。ビルドできるかの確認はできていないが、恐らく`$export LD_LIBRARY_PATH=~/local/glibc/lib/`を事前に設定してからビルドしないとダメだと思われる。

# 参考

ちなみにCentOS5系でも同じようにやってみたが、何かしらが足りずglibcのビルドに失敗。

```
$../configure --prefix=${HOME}/local/glibc
・・・
checking for symlinks in /home/vagrant/local/glibc/include... ok
running configure fragment for nptl/sysdeps/x86_64
checking for .cfi_personality and .cfi_lsda pseudo-ops... no
configure: error: assembler too old, .cfi_personality support missing
```

同じ問題になっている人もいた

[ [SOLVED] Problem with the configuration step of the Glibc 2.11](https://www.linuxquestions.org/questions/linux-server-73/problem-with-the-configuration-step-of-the-glibc-2-11-a-818868/)


上記も最終的にOSのバージョンあげてるっぽいし、やはり可能ならば最新のOS使ったほうが手っ取り早いし、余計なトラブルとか発生しなさそうだし、その方が絶対いい。