1

いくつかの便利な無料/オープン ソース ツールを Android に移植しました。1 つは Octave で、もう 1 つは gnuplot です。彼らは一斉に連携して、Matlab のような機能を無料 (スピーチのように) および無料 (ビールのように) 提供します。興味深い方法でそれらをアプリ内に詰め込みました。具体的には、

1) libs/armeabi ディレクトリ内に実行可能ライブラリと共有ライブラリを含めます。Androidの命名規則により、面白い名前を付ける必要があります。

2) ディレクトリbin/ とを作成しますmylib/。私は彼らに完全な許可を与えます。

3)bin/解凍したlib/ディレクトリ内の実行可能ファイルへのリンクを作成します。私は彼らに正しい名前と完全な権限を与えます。

4)mylib/解凍したlib/ディレクトリにある共有ライブラリへのリンクを作成します。私は彼らに正しい名前と完全な権限を与えます。

5) 次に、現在ディレクトリld-linux.so.3内にあるライブラリの 1 つであるものと、そのディレクトリを指すオプションを使用して、Android ターミナル エミュレータから実行可能ファイルを起動します。mylib/--library-pathmylib/

Octave は、これを行う Android のすべてのバージョンで完全に動作しますが、Jelly Bean のみを実行しているときに gnuplot を起動しようとすると、次のエラーが発生します。

error while loading shared libraries: gnuplot: failed to map segment 
from shared object: Operation not permitted.

では、同じ方法で作成された 2 つの実行可能ファイルの 1 つに対してこのエラーが発生するのはなぜでしょうか? なぜジェリービーンだけ?また、JB では、自分をスーパー ユーザーにすると、すべてが再び機能します。

デバッグ方法について何か考えはありますか? すべてのファイルがそこにあり、意図した権限を持っていることを確認しました。

助けてください。そうすれば、無料でオープン ソースの教育的で便利なアプリを支援することになります。

4

1 に答える 1

0

問題は、実行可能ファイルのコンパイル方法にありました。これらは、新しいアーム デバイスを適切にサポートするクロス コンパイラでコンパイルする必要がありました。私が使用したコンパイラは、ARM デバイスのサブセットでのみ動作する実行可能ファイルを生成しました。この問題は、さまざまなバージョンの Android にはありませんでした。

于 2014-08-21T18:45:31.923 に答える