TermuxでコンパイルしたELFバイナリに関するメモ
Termuxという、非rootで使えるLinux CUI環境というかアプリがある。 これで興味深いのはパッケージ管理システムが提供されていて、clangが入れられる。 (なお、gccは提供されていない)
これは本当にARM aarch64なELFバイナリファイルを生成している。
Termuxの仕組みは/data/data/com.termux/files/をprefixとした環境になっているので、
/data/data/com.termux/files/usr/libにいろいろな共有ライブラリ(dynamic library)がある。
ところで、上で作ったhelloファイルが必要とする共有ライブラリは、libdl.soとlibc.soなのだが、
/data/data/com.termux/files/usr/libには存在しなかった。
調べてみたところ、/system/lib/libdl.soと/system/lib/libc.soを参照しているようであった。
つまり、システムで使えるものは使う方針のようだ。
adbからアクセスできる/data/local/tmp/にコピーしたら、非Termux環境で使えた。
方法は以下の通り。
一旦Termuxでsdcard領域に退避させる。
$ pwd
/data/data/com.termux/files/home
$ cp hello storage/shared
これをadbから/data/local/tmp/にコピーする。これはsdcard領域では実行権限が付与できないからである。
$ adb shell
$ cp /sdcard/hello /data/local/tmp
$ chmod +x /data/local/tmp/hello
$ /data/local/tmp/hello
Hello, world.
$
しかし実用的にはPC上でクロスコンパイルしたほうがうんと楽であろうから、 単なる小ネタではある。