ラベル SL4A の投稿を表示しています。 すべての投稿を表示
ラベル SL4A の投稿を表示しています。 すべての投稿を表示

2011/07/18

Can't locate unicore/PVA.pl

SL4A + Perl でスクリプトを書いていじってたら、日本語(マルチバイト)があった部分で、
Can't locate unicore/PVA.pl in @INC (@INC contains: ~@INCのパス~) at /data/data/com.googlecode.perlforandroid/files/perl/5.10.0/utf8_heavy.pl line 97, line xxx.
というメッセージが出力された。これはhide_o_55氏の
SL4AのPerl for Androidでマルチバイト文字を使う際に落ちる件
に書かれている手順でAndroid.pmのdo_rpc()を修正することで動くようになる。

しかし、日本語をファイルへ出力しようとすると、
Wide character in print at スクリプト名 line xxx, line yyy.
となり内部エンコードのまま出力されている。EncodeがあればいいのだがSL4A + Perl にはない。コンパイルするのも手間がかかりそう。
ということで、unicore/PVA.pl を用意してみる。

SL4AのPerlにはPVA.plを作成するのに必要なモジュールの一部がないので実行はLinux PCで。
SL4AのPerlのバージョンが5.11.0なので、http://www.cpan.org/src/5.0/からPerl 5.11.0のソースをダウンロードして展開。
cd perl-5.11.0/lib/unicore
perl ./mktables
cd ..
と実行してPVA.plが作成されたことを確認。このファイルだけあればOKというわけではないので、unicoreディレクトリをSDカード(/sdcard/com.googlecode.perlforandroid/extras/perl/site_perl/)にコピー。
これで今のところAndroid.pmのdo_rpc()を修正しなくても、うまく動いている模様。

2011/01/19

IS01でSL4AのPerlを動かす

SL4AからPerlを起動(という表現でいいのか?)する時にLD_LIBRARY_PATHにK.Takata氏がコンパイルしたlibm.soへのパスを追加できれば動くと思われるので、消極的な方法で動かしてみる。
libm.soはIS01でPerlを動かすを参照。

試してみる方は自己責任で。
必要なもの。
  1. root権限
  2. K.Takata氏がコンパイルしたlibm.so
手順
  1. Perl for Android のperl (/data/data/com.googlecode.perlforandroid/files/perl/perl)を「perl0」にリネーム
  2. libm.soを/data/data/com.googlecode.perlforandroid/lib/にコピーし、パーミッションを755、所有者を元々あったperlと同じにする。
  3. /data/data/com.googlecode.perlforandroid/files/perl/perlを以下の内容で作成し、元々あったperlと同じパーミッション、オーナーにする。
#!/system/bin/sh
LD_LIBRARY_PATH=/data/data/com.googlecode.perlforandroid/lib exec /data/data/com.googlecode.perlforandroid/files/perl/perl0 $*
2.のlibm.soは/data/に置いてもいけるはず。ただし、3.のLD_LIBRARY_PATHをそのように変更する必要あり。
3.のシェルスクリプトは、LD_LIBRARY_PATH ~ perl0 $* の部分は1行で記述。execは
無くてもいいかも。

Android for Perlのインストール時に一緒に入るサンプルのtest.plを動かしてみる。

2011/01/09

IS01でPerlを動かす

2011/01/03の IS01ではSL4AのPerlは動かない では、SL4AのPerlは動かなかったが、__aeabi_fadd などを含んだ状態のlibm.soをIS01用にコンパイルして下さった方がいた。

ハングアップの日々 (2010/12) K.Takata氏のページ

2010/12/13 の記事にあるlibm.so (libm.7z)をダウンロードし、IS01にコピー。
adb push libm.so /data
adb shell
$ chmod 755 libm.so
で、Perlを起動してみる。
$ LD_LIBRARY_PATH=/data
$ /data/data/com.googlecode.perlforandroid/files/perl/perl --version
動くことを確認。しかし、K.Takata氏が書かれているとおり、SL4A上からはPerlが動かせない。K.Takata氏のように、SL4AのPerl for Androidをコンパイルし直すか、それとも/system/lib/のlibm.soを差し替えてしまうか。前者はコンパイル環境を構築しないといけないし、後者は、他への影響があるかもしれないし、うーん、迷う。

2011/01/19 追記
消極的な方法でSL4A上から動くようにしてみた
IS01でSL4AのPerlを動かす

# /system/lib/ 配下のファイルのパーミッションが755ではなく、644なのが気になる。

2011/01/03

IS01ではSL4AのPerlは動かない

タイトルのとおり、動かなかった。
/data/data/com.googlecode.perlforandroid/files/perl/perl --version
と実行すると
reloc_library[1302]:  2557 cannot locate '__aeabi_fadd'...CANNOT LINK EXECUTABLE
となる。
NDK周りの問題かと思ったので、(IS01のlibm.soの問題。IS01でPerlを動かす、参照)SL4AのページからPerlの最初のリリース時のase_r13.apk (2009/09/22リリース)を入れてperl_r0.zipを入れてみたけど結局動かず。
Android NDK, Revision 2の頃のコンパイルだから動くかな、と思ったけど。残念。

IS01では、SL4Aで動いたのは試した範囲ではLua, Shell、でJRuby, Pythonは動かなかった(その他は試さず)。しかし、一見動いているLuaもhttp通信を行うため
require ("socket.http")
とすると、
error loading module 'mime.core' from file '/data/data/com.googlecode.luaforandroid/files/lua/lib/lua/5.1/mime/core.so':
Symbol not found:
mimeモジュールのところでとエラーがでる。
mimeモジュールを使わないようにsocket.httpを変更してみたけど、
http://www.google.co.jp/ のようなページは取得できるものの、「/」のあとに何かあると、取得できず。
Luaをきちんと勉強していないので、深追いはせず。